400-638-8808
|
微信公众号
近3个月以来,公司的个别应用服务器(java)莫名其妙的出现被kill掉现象,原因各异,排查起来也比较痛苦。那哪些原因会导致JAVA进程被kill呢?该如何去排查问题呢?在这里做个总结,跟大家分享下:
哪些原因可能会导致JAVA进程被kill呢?
Java应用程序的问题:发生OOM导致进程Crash
JVM自身故障:JVM或JDK自身的Bug导致进程Crash
被操作系统OOM-Killer
该如何去排查问题呢?
1.Java应用程序的问题:发生OOM导致进程Crash
这种情况主要取决于研发代码质量,我遇到过的大概有2次。一般情况下,出现OOM异常,JVM的GC会进行回收,是不会直接导致JVM进程退出的。如果出现退出的情况,那就是内存泄漏,由于内存占用越来越大,结果。。。。不过这种JVM的OOM导致的异常,很好排查。排查步骤如下:
Step1: 查看JVM参数 -XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath=*/java.hprof
Step2: 根据HeapDumpPath指定的路径查看是否产生dump文件;
Step3: 若存在dump文件,使用VisualVM这种可视化工具分析就行等工具分析即可;
2.JVM自身故障:JVM或JDK自身的Bug导致进程Crash
这种情况遇到一次,是因为JDK自身BUG导致的。当JVM出现致命错误时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下,然而可以通过jvm参数-XX:ErrorFile指定生成路径,eg:
-XX:ErrorFile=/var/log/hs_err_pid<pid>.log
然根据错误信息,可以进入Java BUG dataBase库中去查找对应的BUG:
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8134389
被操作系统OOM-Killer
这种情况也遇到过一次。Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。可以去/var/log/messages里翻系统报错日志,执行如下命令:
当然,你也可以去内核日志里头查询。有时Linux系统或者系统上运行的java或者其它进程,会发生一些莫名其妙的问题,比如突然挂掉了,比如突然重启等等。在软件上找不到问题所在,此时我们应该怀疑硬件或者内核的问题,此时我们就可以执行 dmesg | grep java 命令来查看:
完全是可以看到内核对进程做对操作。
总结
对以上异常出现排查的排查顺序一般是:Java应用程序的问题 -> JVM自身故障 -> 被操作系统OOM-Killer。如有疑问详询天下数据客服电话400-6388-808。
天下数据手机站 关于天下数据 联系我们 诚聘英才 付款方式 帮助中心 网站备案 解决方案 域名注册 网站地图
天下数据18年专注海外香港服务器、美国服务器、海外云主机、海外vps主机租用托管以及服务器解决方案-做天下最好的IDC服务商
《中华人民共和国增值电信业务经营许可证》 ISP证:粤ICP备07026347号
朗信天下发展有限公司(控股)深圳市朗玥科技有限公司(运营)联合版权
深圳总部:中国.深圳市南山区深圳国际创新谷6栋B座10层 香港总部:香港上環蘇杭街49-51號建安商業大廈7樓
7×24小时服务热线:4006388808香港服务电话:+852 67031102
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品