您的位置:首页 > 其它

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

2018-03-02 17:27 246 查看
通过Javacore了解线程运行情况:

Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。

应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。而为了性能问题诊断的需要,我们也会主动触发生成 Javacore。在 AIX、Linux、Solaris 环境中,我们通常使用 kill -3
<PID>
产生该进程的 Javacore。

虽然不同版本的 JVM 所产生的 Javacore 的格式会稍有不同,但基本都包含下面几个内容:

TITLE 信息块:描述 Javacore 产生的原因,时间以及文件的路径。常见的 Javacore 产生的三种原因如下:

user:SIGQUIT 信号

gpf:程序一般保护性错误导致系统崩溃

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐