java服务能否关闭托管Unix机箱?

java服务能否关闭托管Unix机箱?,java,unix,out-of-memory,redhat,Java,Unix,Out Of Memory,Redhat,我在一个Redhat Unix机器上检查Java服务,但只发现机器的SSH不工作,SA解释说机器内存不足,开始消耗交换空间,最终导致机器挂起并关闭 他暗示我的java服务会导致服务器宕机,我很难相信这是可能的——我认为在最坏的情况下,服务会抛出OfMemory异常,只会自行崩溃 我的java内存设置是:“-Xms1g-Xmx5g”,在/proc/meminfo中,它显示了该框的 MemTotal: 16304084 kB MemFree: 12288796 kB 第二个问题是

我在一个Redhat Unix机器上检查Java服务,但只发现机器的SSH不工作,SA解释说机器内存不足,开始消耗交换空间,最终导致机器挂起并关闭

他暗示我的java服务会导致服务器宕机,我很难相信这是可能的——我认为在最坏的情况下,服务会抛出OfMemory异常,只会自行崩溃

我的java内存设置是:“-Xms1g-Xmx5g”,在/proc/meminfo中,它显示了该框的

MemTotal:     16304084 kB
MemFree:      12288796 kB

第二个问题是,我们是否可以查看/var/log下的一些日志,以找出真正的问题是什么?

您可以查看日志档案,查看内存不足杀手是否在内存不足时杀死了您或其他进程(我的日志正好在/var/log/all.log中,你的日志可能在其他地方,或者你应该查看当天的日志——编辑,在RedHat上,这应该在
/var/log/messages
中,但我不知道默认情况下它们是如何旋转的):

要更好地了解Linux系统内存不足时会发生什么情况,请参阅。或者只搜索“内存不足杀手”

发生的情况是,当操作系统检测到内存不足时,它开始终止进程。有时,这可能会成为
sshd
进程或其他用于登录系统的关键进程

您的Java进程本身可能不会导致停机,但它可能与在同一服务器上运行的其他东西相结合,从而导致该问题


使用
top
还可以查看正在运行的其他进程中有哪些正在使用系统上的剩余内存。要按内存使用情况排序(首先是最高内存),请在运行
top
后键入
M

@Greycon“您是正确的,即使JVM耗尽内存,它也不会消耗所有主机操作系统内存”需要考虑的一件事是:将-Xms1g-Xmx5g设置为-Xms5g-Xmx5g或任何适当的设置。这有助于通过在启动时分配所有内存来防止堆碎片。更多信息:
# grep -i -e "Killed process" -e "out of memory" /var/log/all.log
1406786406 1406786406 0 3 127.0.0.1 2014-07-31T01:00:06-05:00 ahostname kern err kernel[76729.082621]: [76729.082621] 
    Out of memory: Kill process 22407 (java) score 187 or sacrifice child
1406786406 1406786406 0 3 127.0.0.1 2014-07-31T01:00:06-05:00 ahostname kern err kernel[76729.082625]: [76729.082625]
    Killed process 22407 (java) total-vm:859680kB, anon-rss:304232kB, file-rss:608kB
1406811608 1406811608 0 3 127.0.0.1 2014-07-31T08:00:08-05:00 ahostname kern err kernel[101910.841683]: [101910.841683] 
    Out of memory: Kill process 1370 (java) score 198 or sacrifice child
1406811608 1406811608 0 3 127.0.0.1 2014-07-31T08:00:08-05:00 ahostname kern err kernel[101910.841686]: [101910.841686] 
    Killed process 1370 (java) total-vm:859928kB, anon-rss:332688kB, file-rss:560kB