java Tomcat被内核杀死
我的雄猫突然自动关机了。我检查了日志文件,发现它已被终止,并显示以下消息:
kernel: Killed process 17420, UID 0, (java) total-vm:8695172kB, anon-rss:4389088kB, file-rss:20kB
我运行tomcat的设置是-Xms2048m -Xmx4096m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=1024m
运行命令“free-m”时我的系统为:
total used free shared buffers cached
Mem: 7859 7713 146 0 97 1600
-/+ buffers/cache: 6015 1844 Swap: 0 0 0
我用“top-p”监视程序,结果如下
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 8048440k total, 7900616k used, 147824k free, 100208k buffers Swap: 0k total, 0k used, 0k free, 1640888k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4473 root 20 0 8670m 2.5g 6568 S 0.0 32.6 71:07.84 java
我的问题是:
一,。为什么VIRT=8670m(在“top-p”结果中)大于Mem:8048440k,但我的应用程序仍在运行
为什么我的雄猫被内核杀死了?我看不到任何奇怪的内存(与运行时类似)
为了避免发生这种错误,我将做什么?为什么
# 1 楼答案
# 2 楼答案
据我所知,在Linux中导致内核终止任务的唯一原因是out of memory killerThis article from Oracle可能更近一些,也更相关
解决方案取决于系统上运行的其他内容。从您展示的情况来看,您的可用内存不足2GB,但您的Java堆最大容量约为4GB。我们不知道的是,在您拍摄快照时,Java堆有多大。如果它的初始容量为2GB,那么您可能正在接近极限。同样根据您的格式,您没有可用作备用的交换空间
如果系统上有任何其他重要进程,则需要说明它们的最大内存使用量。简单的回答是尽量减少Xmx和MaxPermSize,如果可能的话,您必须分析您的负载,看看这是否可能,或者是否会导致不合理的GC CPU使用
一些注意事项: