Linux下应用无端挂掉排查记录

一、前言

主要起因是在客户测试环境内,频频进程被干掉但是缺查不到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博客

参考内容2:如何配置Linux内存不足杀手 (oracle.com)

参考内容3:出现OOM Killer的原因与解决方案 (aliyun.com)

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
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值