出处:JAVA进程突然消失的原因?

问题描述

在实际生产环境下,如果我们遇见Java进程突然消失,该如何去排查问题?

思路

可能有几种原因:

①、Java应用程序的问题:发生OOM导致进程Crash

最常见的是发生堆内存异常“java.lang.OutOfMemoryError: Java heap space”,排查步骤如下:

  • Step1: 查看JVM参数 -XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath=*/java.hprof;
  • Step2: 根据HeapDumpPath指定的路径查看是否产生dump文件;
  • Step3: 若存在dump文件,使用Jhat、VisualVM等工具分析即可;

②、JVM出错:JVM或JDK自身的Bug导致进程Crash

  当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定。
  默认情况下,该文件是生成在工作目录下的,当然也可以通过 JVM 参数指定生成路径:

-XX:ErrorFile=/var/log/hs_err_pid<pid>.log

这个文件的内容他主要有如下内容

  • 日志头文件
  • 导致 crash 的线程信息
  • 所有线程信息
  • 安全点和锁信息
  • 堆信息
  • 本地代码缓存
  • 编译事件
  • gc 相关记录
  • jvm 内存映射
  • jvm 启动参数
  • 服务器信息

拿到这个文件后,不用说了,慢慢啃吧。说到这里,我要摸着良心说。这个文件巨复杂,如果要会读这个文件,请下点功夫。

③被操作系统OOM-Killer

  Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。
  因此,你发现java进程突然没了,首先要怀疑是不是被linux的OOM killer给干掉了!
  你可以去下面这个文件里翻

    • 系统报错日志:/var/log/messages

  你执行命令

egrep -i 'killed process' /var/log/messages 
# egrep = grep -E 可以使用基本的正则表达外, 还可以用扩展表达式,  -i代表忽略大小写  
#或者
grep “Out of memory” /var/log/messages

去日志里进行查询。
  当然,你也可以去内核日志里头查询。有时Linux系统或者系统上运行的java或者其它进程,会发生一些莫名其妙的问题,比如突然挂掉了,比如突然重启等等。在软件上找不到问题所在,此时我们应该怀疑硬件或者内核的问题,此时我们就可以使用 dmesg来查看:

dmesg -T| grep java
#或者
dmesg -T | grep 'Out of memory'
# -T 是显示时间戳

再对比java日志停止时间,看来这里才是问题的根源,所以接下来从优化java内存占用、加内存入手尝试解决问题吧!

备注:

  dmesg命令是用来在Unix-like系统中显示内核的相关信息的。dmesg全称是display message (or display driver),即显示信息。

  实际上,dmesg命令是从内核环形缓冲区中获取数据的。当我们在Linux上排除故障时,dmesg命令会十分方便,它能很好地帮我们鉴别硬件相关的error和warning。除此之外,dmesg命令还能打印出守护进程相关的信息,已帮助我们debug。

最新文章

  1. mysql ,为什么一张表的varchar关联另一张表varchar执行失败的一个原因
  2. java学习第10天 (增加关于eclipse添项目)
  3. 在LINUX上创建GIT服务器【转】
  4. Sql Server CTE递归
  5. UVA 10273 Eat or Not to Eat?
  6. oracle 数据库连接的四种方式
  7. HDU 1045(Fire Net)题解
  8. 小米wifi局域网下播放硬盘影片使用方法
  9. [转载]PS各个工具的字母快捷键和英文全名
  10. ECMAScript 6 笔记(二)
  11. STS搭建SpringBoot项目
  12. kali linux 配置嵌入式开发环境
  13. django 视图函数返回queryset对象或日期对象至浏览器ajax接收的写法
  14. sleep和Sleep区别
  15. 从零上手Python关键代码
  16. Python基础【day03】:字典(一)
  17. “ORA-06550: 第 1 行, 第 7 列”解决方法
  18. Emeditor V14注册码
  19. System帐户!我使用你登陆
  20. 【CSAPP笔记】3. 浮点数

热门文章

  1. Java 注解指导手册(上)
  2. C++入门经典-例9.5-为具体类型的参数提供默认值
  3. 成功解决gyp verb ensuring that file exists: C:\Python27\python.exe gyp ERR! configure error gyp ERR! sta
  4. oracle中监听程序当前无法识别连接描述符中请求服务 的解决方法
  5. Selenium2+python自动化-使用JS脚本处理网页滚动条
  6. R语言:读入txt文件中文文本出现乱码解决方案
  7. python:将numpy数组写入csv文件
  8. jdk git maven Jenkins的配置
  9. numpy之数组属性与方法
  10. Fullgc引发redis超时异常