记录一次服务进程强行退出的问题排查过程

场景:我这边从Hbase跑一亿多的全量数据录入Elasticsearch中,跑了四个多小时,程序突然挂掉了,然后我就纳闷了,为啥突然挂掉了???

思路1:是不是Java 进程抛出OOM异常?
分析程序日志没有任何异常,如果出现这种异常应该会在日志中打印的啊,怎么没有呢?

如果是java OOM异常会打印 Java heap space的

Exception in thread "pool-13-thread-25" java.lang.OutOfMemoryError: Java heap space
Exception in thread "pool-13-thread-48" java.lang.OutOfMemoryError: Java heap space

后来我在JVM参数中添加了-XX:+UnlockExperimentalVMOptions-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log看看垃圾回收情况以及如果出现OOM后生成java_pid30796.hprof文件然后利用Jprofile进行分析OOM异常根源,但是发现并没有出现OOM异常,也没有dump文件,因而可以确定并不是java OOM异常。

思路2:是不是linux保护机制强制杀死的进程?
其实一开始没有看到程序OOM异常日志,就应该想到是linux保护机制强行杀死的,搞的在上面饶了一大圈,浪费太多时间

然后百度,查看最近被linux kill掉的进程信息
执行命令:dmesg | egrep -i -B100 'killed process'
输出:

[20987454.255158] Out of memory: Kill process 24953 (java) score 805 or sacrifice child
[20987454.255239] Killed process 24953 (java) total-vm:10973432kB, anon-rss:7284104kB, file-rss:0kB, shmem-rss:0kB

原因是Low memory耗尽。“内核使用low memory来跟踪所有的内存分配,一旦low memory耗尽,就会查杀进程,以保持系统的正常运转。说白了 OOM Killer 就是一层保护机制,用于避免 Linux 在内存不足的时候不至于出太严重的问题,把无关紧要的进程杀掉

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值