首页 > 编程知识 正文

kill进程杀不掉的原因,java线程会自动关闭吗

时间:2023-05-06 03:23:54 阅读:130606 作者:2546

问题的说明

在实际生产环境中,如果Java进程突然消失,该怎么办?

想法

可能有几个理由。

、Java APP应用问题:发生OOM导致的进程崩溃

最常见的是堆内存异常“Java.lang.out of memory error : javaheapspace”的发生,故障排除步骤如下。

step 1:查看JVM参数- xx : heapdumponoutofmemoryerror和- xx : heap dump path=*/Java.hprof;

确定是否基于step2:heapdumppath中指定的路径生成dump文件;

如果有step3:dump文件,可以使用Jhat、VisualVM等工具进行分析;

、JVM错误: JVM或JDK自身错误导致的进程Crash

如果JVM发生致命错误并发生崩溃,则会生成类似hs_err_pid_xxx.log的文件。 该文件包含引起JVM crash的重要信息,可以通过分析引起JVM crash的原因来保证系统的稳定性。

缺省情况下,文件在工作目录下生成。 当然,也可以使用JVM参数指定生成路径。

- xx : error file=/var/log/hs _ err _ PID.log

这份文件的内容他主要有以下内容

头文件

导致crash的线程信息

所有线程信息

安全点和锁定信息

堆信息

本地代码缓存

编译事件

gc相关记录

jvm内存映射

jvm启动参数

服务器信息

拿到这份文件后,当然,慢慢吃吧。 说到这里,我摸着良心说。 这个文件很复杂,所以为了能看懂这个文件,请下功夫。

被OOM-Killer

Linux内核有一种称为内存外钥(oom killer )的机制。 此机制监视内存消耗过多,特别是瞬间消耗大量内存的进程,内核会杀死该进程,以防止内存耗尽。

因此,如果发现java进程突然消失,请先怀疑是被linux的OOM killer杀死的。

你可以翻阅下一份文件

系统错误日志:/var/log/messages

你执行命令

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

# egrep=grep-E除了基本正则表达式外,还可以使用扩展表达式,表示忽略大小写

#或grep“内存输出”/var/log/messages

我去查询日志。

当然,也可以查询内核日志。 在Linux系统或系统上运行的java和其他进程可能会出现令人费解的问题,例如突然锁定或突然重新启动。 如果在软件中未发现问题,则必须怀疑硬件或内核问题。 在这种情况下,可以使用dmesg验证以下内容:

dmesg-t

#或

内存丢失- t是显示时间戳

比较java日志的停止时间,这似乎是问题的根源,所以接下来我们优化java内存的使用量,从添加内存开始尝试解决问题。

评论:

dmesg命令用于在Unix-like系统上显示有关内核的信息。 dmesg的全名是显示消息(ordisplaydriver ),显示信息。

实际上,dmesg命令从内核的环形缓冲区检索数据。 在Linux上进行故障诊断时,dmesg命令非常有用,有助于识别与硬件相关的错误和警告。 此外,dmesg命令还可以打印有关守护进程的信息,从而为调试提供了帮助。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。