文章目录
一、前言
主要起因是在客户测试环境内,频频进程被干掉但是缺查不到history的奇怪问题的纠结,为什么会莫名挂了?然后继续重启,继续挂…(当然先得排除自己的问题,坚决先不问客户)
值得一提的前提是:
启动应用使用非root权限开启。
二、首次排除思路
①检查history
排除人为干扰:检查是否存在脚本执行关闭或者kill记录。
②检查内存
是否内存不足以满足应用导致G掉。
③检查定时任务
存在可能的定时任务关闭应用的可能。
④询问其他非纸面因素
理应咨询伺服器的管理员,存在定期运行的任务运行导致G掉的可能。
三、再次纠结思路
①应用oom
1、检测应用日志,是否存在oom异常
2、检查jvm参数-Xmx
对比
通过
cat /proc/{{PID}}/status
获取进程峰值内存数据,是否具备异常可能。**Tips:**尽可能测试过峰值利用应用后再获取
我们通常只需要计算
物理内存峰值(VmHWM)
即可
参数参考来源:Linux中查看进程占用内存的情况 - 胡桃夹子 (hutaow.com)
参数名 | 描述 |
---|---|
VmPeak | 进程所使用的虚拟内存的峰值 |
VmSize | 进程当前使用的虚拟内存的大小 |
VmLck | 已经锁住的物理内存的大小(锁住的物理内存不能交换到硬盘) |
VmHWM | 进程所使用的物理内存的峰值 |
VmRSS | 进程当前使用的物理内存的大小 |
VmData | 进程占用的数据段大小 |
VmStk | 进程占用的栈大小 |
VmExe | 进程占用的代码段大小(不包括库) |
VmLib | 进程所加载的动态库所占用的内存大小(可能与其它进程共享) |
VmPTE | 进程占用的页表大小(交换表项数量) |
VmSwap | 进程所使用的交换区的大小 |
②系统oom
首先排除内容参数
overcommit_memory
干扰,其值必须为默认值0的才可以作为往下排查的前提。
cat /proc/sys/kernel/threads-max
参考内容1:OutOfMemoryError系列(8): Kill process or sacrifice child_铁锚的博客-CSDN博客
1、过滤被杀死的原因
grep -i kill /var/log/messages*
示例讯息:
/var/log/messages-20220424:Apr 21 01:05:35 t-demo kernel: scheduled-9 invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
/var/log/messages-20220424:Apr 21 01:05:35 t-demo kernel: [<ffffffffaa3c252d>] oom_kill_process+0x2cd/0x490
/var/log/messages-20220424:Apr 21 01:05:35 t-demo kernel: Out of memory: Kill process 8146 (java) score 179 or sacrifice child
/var/log/messages-20220424:Apr 21 01:05:35 t-demo kernel: Killed process 8146 (java), UID 1000, total-vm:5756504kB, anon-rss:1802712kB, file-rss:0kB, shmem-rss:0kB