现在有一个进程挂起了,如何用工具查出原因

本文介绍了Javacore的基本概念及其在性能问题诊断中的应用。Javacore是一种诊断工具,能提供Java虚拟机中线程使用情况的快照,包括线程状态和执行堆栈等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 通过Javacore了解线程运行情况:
    Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。
    应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。而为了性能问题诊断的需要,我们也会主动触发生成 Javacore。在 AIX、Linux、Solaris 环境中,我们通常使用 kill -3 <PID> 产生该进程的 Javacore。
  • 虽然不同版本的 JVM 所产生的 Javacore 的格式会稍有不同,但基本都包含下面几个内容:
    • TITLE 信息块:描述 Javacore 产生的原因,时间以及文件的路径。常见的 Javacore 产生的三种原因如下:
      1. user:SIGQUIT 信号
      2. gpf:程序一般保护性错误导致系统崩溃
      3. systhrow:JVM 内部抛出的异常
    • GPINFO 信息块:GPF(一般保护性错误)信息
    • ENVINFO 信息块:系统运行时的环境和 JVM 参数
    • MEMINFO 信息块:内存使用情况和垃圾回收情况
    • LOCKS 信息块:用户监视器(monitor)和系统监视器(monitor)情况
    • THREADS 信息块:所有 java 线程的状态信息和执行堆栈
    • CLASSES 信息块:类加载信息
  • Javacore 中的线程可分为以下几种状态:
    • 死锁(Deadlock)【重点关注】:一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。
    • 执行中(Runnable)【重点关注】:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能在对某个文件操作,有可能进行数据类型等转换等。
    • 等待资源(Waiting on condition)【重点关注】:等待资源,如果堆栈信息明确是应用代码,则证明该线程正在等待资源,一般是大量读取某资源、且该资源采用了资源锁的情况下,线程进入等待状态。又或者,正在等待其他线程的执行等。
    • 等待监控器检查资源(Waiting on monitor)
    • 暂停(Suspended)
    • 对象等待中(Object.wait())
    • 阻塞(Blocked)【重点关注】:指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。这种情况在应用的日志中,一般可以看到 CPU 饥渴,或者某线程已执行了较长时间的信息。
    • 停止(Parked)

参考https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy_javacore.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值