问题现象:
测试人员反馈预发布环境接口请求报502网关错误,检查后发现java程序挂掉了,重启后恢复正常,但过了不久发现java程序又自动停掉了,没有任何人为操作,不知道程序为何会自己停掉
排查步骤:
1.查看内存使用情况:free -m,htop
发现剩余内存不多了,而且该进程占用虚拟内存较大
推测是机器内存不够被linux内核OOM killer机制给杀掉了,进一步去证实推测
2.查看系统日志: egrep -i -r 'killed process' /var/log,grep "Out of memory" /var/log/messages或者dmesg命令
由于程序记录了进程ID为3777,所以可以直接根据进程号从/var/log/messages中找出结果来:
May 17 15:11:55 staging-java kernel: [ 3777] 1002 3777 3609618 228573 691 0 0 java
May 17 15:11:55 staging-java kernel: Out of memory: Kill process 3777 (java) score 27 or sacrifice child
3.至此问题确定:OOM
解决方案:
1.合理设置jvm参数
2.排查代码是否存在内存泄露