一个java服务可以打倒托管Unix盒子吗?

时间:2015-01-09 16:11:25

标签: java unix out-of-memory redhat

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

他暗示我的java服务关闭了服务器,我很难相信这是怎么可能的 - 正如我认为在最坏的情况下,服务会抛出OutOfMemory异常并且只会崩溃。

我的java内存设置是:“ - xms1g -Xmx5g”,并且从/ proc / meminfo它显示的框中有

MemTotal:     16304084 kB
MemFree:      12288796 kB

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

1 个答案:

答案 0 :(得分:2)

您可以查看日志存档,看看内存不足会在内存不足时杀死您的进程或其他进程(我的日志恰好位于/var/log/all.log中,您的日志可能在某处否则和/或你应该查看发生这一天的日志 - 编辑,在RedHat上,这应该在/var/log/messages,但我不知道它们如何被默认旋转:

# 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

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

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

单独的Java进程可能不会导致中断,但它可能与同一服务器上运行的其他内容相结合导致问题。但是查看OOM Killer的日志是一个很好的起点。

使用top来查看正在运行的其他进程正在使用系统上的其余内存也是很好的。要按内存使用情况排序(首先是最高内存),请在运行M后输入top