什么可以杀死除OOM之外的Linux上的Java进程?

时间:2013-11-29 20:53:31

标签: java linux jvm out-of-memory

我有两台虚拟服务器用于托管我的网络应用。它们是相同的,运行Debian 6和1.5GB的RAM。我使用全新安装的脚本配置操作系统和Tomcat,所以我知道它们完全相同。

我的webapp在Tomcat中运行,我设置了850M堆和100M烫发大小。我的应用程序经常在其中一台服务器上死机。我的第一直觉是检查OOM杀手,但在日志中没有这方面的证据。

问题:

  • OOM杀手可以在不留下适当的日志消息的情况下杀死应用程序吗?
  • [编辑]如果没有,并且鉴于我没有什么可以杀死这个过程,我在哪里可以找到诊断问题的证据?

由于

2 个答案:

答案 0 :(得分:2)

JVM终止的原因很多。它可以根据拥有用户或root发送给它的信号终止,它也可以基于 OOM杀手终止(如你所提到的)。

在某些情况下,我可以将随机崩溃追溯到错误/错误的RAM ,这会导致JVM中的内存损坏,最终导致进程终止SIGSEGV 。您可以查看是否有hs_err_pidXXXX.log个文件。如果运行该进程的用户没有在目标目录中写入的权限,则可能会丢失它们。您可以使用-XX:ErrorFile=/path/to/file.

指定他们的去向

由于个人经验,如果发生零星的,无法解决的,无法解释的随机崩溃,我通常做的第一件事就是运行memtest86几个小时。我倾向于在网络中拥有它的PXE可引导映像。

编辑:鉴于您提到由另一家公司运营的虚拟专用服务器,您无法在裸机上运行memtest86,但也有一些用户空间版本可能值得尝试。< / p>

答案 1 :(得分:0)

如果要在OOM上杀死JVM(有时是有效的用例),则可以使用以下选项启动JVM:-XX:OnOutOfMemoryError=kill -9 %p