我有两台虚拟服务器用于托管我的网络应用。它们是相同的,运行Debian 6和1.5GB的RAM。我使用全新安装的脚本配置操作系统和Tomcat,所以我知道它们完全相同。
我的webapp在Tomcat中运行,我设置了850M堆和100M烫发大小。我的应用程序经常在其中一台服务器上死机。我的第一直觉是检查OOM杀手,但在日志中没有这方面的证据。
问题:
由于
答案 0 :(得分:2)
JVM终止的原因很多。它可以根据拥有用户或root发送给它的信号终止,它也可以基于 OOM杀手终止(如你所提到的)。
在某些情况下,我可以将随机崩溃追溯到错误/错误的RAM ,这会导致JVM中的内存损坏,最终导致进程终止SIGSEGV
。您可以查看是否有hs_err_pidXXXX.log
个文件。如果运行该进程的用户没有在目标目录中写入的权限,则可能会丢失它们。您可以使用-XX:ErrorFile=/path/to/file.
由于个人经验,如果发生零星的,无法解决的,无法解释的随机崩溃,我通常做的第一件事就是运行memtest86
几个小时。我倾向于在网络中拥有它的PXE可引导映像。
答案 1 :(得分:0)
如果要在OOM上杀死JVM(有时是有效的用例),则可以使用以下选项启动JVM:-XX:OnOutOfMemoryError=kill -9 %p