我遇到了一个很大的问题,openfire 时不时会因为内存不足而崩溃。在 java 日志中,我有以下错误日志。然而问题是
- Openfire 是 32 位的,我无法以 64 位运行它。
- 因为它只有 32 位,所以我可以给 openfire 的最大内存是 4GB。
- 我的系统非常强大,有 32 GB 的 RAM,所以我不能再增加
- 最多只有 100 个用户在使用 openfire,但似乎仍然无法处理
- 我每 5 分钟运行一次 cron 任务来监控此服务,并时不时地重新启动
有没有什么解决方案可以优化 open-fire 的内存使用并防止其崩溃?
错误日志如下
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 140 bytes for CHeapObj-new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (allocation.inline.hpp:44), pid=31239, tid=2735213424
#
# JRE version: 6.0_41-b02
# Java VM: Java HotSpot(TM) Server VM (20.14-b01 mixed mode linux-x86 )
--------------- T H R E A D ---------------
Current thread (0xad2c7000): JavaThread "Jetty-QTP-AdminConsole-16012" [_thread_in_vm, id=21077, stack(0xa3030000,0xa3081000)]
Stack: [0xa3030000,0xa3081000], sp=0xa307f3d4, free space=316k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x727990]
答案1
Openfire 是用 Java 编写的,不适用于 32 位。如果您使用 64 位 jvm,它将以 64 位模式运行,您可以为其分配尽可能多的内存。尝试安装 64 位 jvm/jre