找出谁(什么)杀死了我的进程

时间:2012-12-01 12:58:38

标签: java linux process signals kill

当我从bash脚本运行我的java程序时,有几次我收到一条消息:

MyProgram.bash: line 30:  4388 Killed

我将bash的参数设为最大值:

ulimit -Ss unlimited
ulimit -Sc unlimited
ulimit -Sn 4096

但是当我在击败后制作CTRL + C时,我有这个错误:

OpenJDK 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminated

我添加此信息,当我在另一台机器上运行相同的程序时,我没有这个例外! 我使用这些参数运行我的程序(我在内存中有5Go)

jvmargs="-d64 -Xms512m -Xmx3G -Xss1G"

我的算法需要大量内存,因为我使用序列化。那么为什么我杀了消息,而不是OutOfMemoryError的例外?我该怎么办才能解决问题?为什么当我在另一台具有相同参数的机器上运行时,它会起作用?

2 个答案:

答案 0 :(得分:4)

重读该错误消息:

  

OpenJDK 64位服务器VM警告:异常java.lang.OutOfMemoryError发生调度信号SIGINT到处理程序 - 虚拟机可能需要被强行终止

如果OpenJDK无法正确地处理中断信号(因为它完全没有内存),它可能会使用本身来解决。

答案 1 :(得分:2)

如果进程因内存不足,Segfault或导致Linux杀死它的其他原因而被杀死,您将在dmesg和/或/ var / log / dmesg或/ var /中找到带有堆栈跟踪的问题描述日志/消息日志文件。尝试在linux控制台上键入dmesg。

# dmesg
[4374940.147496] php-fpm[15522]: segfault at 10000004d8 ip 00000010000004d8 sp 00007ffff9d41428 error 14 in libnss_dns.so.2[7ffe4d5a1000+5000]
[4375020.428429] soffice.bin[23336]: segfault at 48 ip 00007f8d63c566c0 sp 00007ffff529cc88 error 4 in libsvllo.so[7f8d63bb1000+108000]