java进程无故消失的起因分析

作者 : 开心源码 本文共829个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共94人阅读

问题

Java进程在服务器中运行一段时间,服务不稳固,偶尔出现进程无故的死亡。临时的办法是重启进程,但过一段时间后又无故死亡。没有任何 jvm oom的错误信息。

路径

  1. 通过jvm监控查看jvm监控状态

    oom_killer_jvm监控指标.png

    从图表上看,进程在在死亡之前一直处于正常状态。先不考虑jvm关于young/old的相关调优。排除由jvm引发的进程猝死。

  2. free命令查看机器内存

    既然不是jvm的问题引发的进程死亡,就进一步考虑能否因为机器内存等起因引发的进程猝死。

    oom_killer_free命令.png

    当时的证据图已不存在,随便找一个只为讲述。

    free命令中第一行从操作系统角度来看各用量,第二行从程序角度来看各用量。
    实际上第二行的free是实际真实程序可用的内存,即3.6G。也等于在第一行中的 free + buffers + cached(在os角度,buffers和cached都属于被用的,已经被分配。)

  3. 确认内存不足,找出进程死亡起因

    确认是内存不足以后,即可以通过操作系统的日志去证实进程确实是被操作系统杀掉。

    • 首先通过dmesg | grep java查看能否有相关数据。dmesg实际展现了大量的系统信息,
    • 通过/var/log/messages找到对应能否有oom_killer杀掉我们的java进程,可以通过关键字oom_killer,也可以通过进程号找到。下面信息是网上找到的相关信息,我的证据因为当时没保留,被清空了。
      memory: usage 2047696kB, limit 2047696kB, failcnt 23543  memory+swap: usage 2047696kB, limit 9007199254740991kB, failcnt 0  ......  Free swap  = 0kB  Total swap = 0kB  ......  Memory cgroup out of memory: Kill process 18286 (java) score 933 or sacrifice child

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » java进程无故消失的起因分析

发表回复