linux java进程消失_linux服务器上java进程突然消失的原因

linux服务器上java进程运行一段时间无缘无故消失,大致有三种情况。

linux的OOM killer杀死

JVM自身故障

jvm的OOM导致进程退出

1.Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。

如果java进程消失可以先看下系统报错日志/var/log/messages是否有相关信息

egrep -i 'killed process' /var/log/messages

或者可以去内核日志中查看是否有相关信息:

dmesg | grep java

(dmesg命令可以查看内核日志,一般内核错误信息都会保存在内核环形缓冲区中)

这种问题一般会设置内存警戒值,当内存使用超过一定比例给开发人员发警告信息,让开发者及时查看相关问题。

2.java自身故障

当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定。

默认情况下,该文件是生成在工作目录下的,当然也可以通过 JVM 参数指定生成路径:-XX:ErrorFile=/var/log/hs_err_pid.log

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

- 日志头文件

- 导致 crash 的线程信息

- 所有线程信息

- 安全点和锁信息

- 堆信息

- 本地代码缓存

- 编译事件

- gc 相关记录

- jvm 内存映射

- jvm 启动参数

- 服务器信息

这种情况在jdk7版本时遇到过几次,一般这种情况都是jvm内部bug,不好排查。

3.jvm的oom

因为JVM的OOM,导致java进程退出的情况。这种情况可以在启动参数中加上下面两个参数,遇到jvm oom时自动生成dump文件。

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=*/java.hprof;

在HeapDumpOnOutOfMemoryError前面用“+”号表示在jvm遇到oom时自动生成堆内存的dump文件,下面HeapDumpPath来指定dump文件位置。

然后去找dump快照文件,接下来借助VisualVM这种可视化工具分析就行。这种情况一般是存在内存泄漏,需要根据dump文件具体分析,定位问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值