服务器上tomcat进程突然终止问题排查
1)检查是否shell进程终止导致tomcat终止(排除)
由于使用./catalina.sh start启动tomcat,启动后tomcat的父PID为1,因此不会由于shell断开而终止
2)tomcat进程是否被kill掉(排除)
查询tomcat的catalina.out日志,未发现有终止的日志,比如
INFO [Thread-6] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
INFO [Thread-6] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
3)检查是否被操作系统kill掉
检查/var/log/messages日志,发现如下日志,并且发现跟tomcat终止的时间符合
kernel: Out of memory: Kill process 7100 (java) score 302 or sacrifice child
kernel: Killed process 7100, UID 502, (java) total-vm:2218428kB, anon-rss:307464kB, file-rss:180kB
Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。
由于运行tomcat的是个人的服务器,配置较低,因此出现内存不足的情况。
解决方案:不建议修改系统的设置,建议给系统添加更多的内存已支持业务