`
willwen
  • 浏览: 26065 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java thread dump分析

    博客分类:
  • java
 
阅读更多

       系统运行4、5年后,随着功能越加越多,到今天总是会有CPU突然占用过高的警告发生,如果处理不好的话则会引起系统的OOM,很是头疼!有必要学习如何分析找到耗费CPU最高的源码,最好的分析方法就是分析thread dump文件

首先:如何产生thread dump日志

第一步:找到应用程序所在的进程号,通过top命令可以找到,linux命令行里输入top命令,然后回车会进入一个显示当前cpu,内存,进程等信息的界面,直接根据你程序的类型找到相应的进程,然后查看pid列的值。

该操作有点类似在window下查看任务管理器各进程的CPU以及内存使用情况:

[login@001 system]$ top -5

top - 11:22:20 up 97 days, 17:58,  3 users,  load average: 3.20, 3.19, 3.38

Tasks: 191 total,   1 running, 188 sleeping,   2 stopped,   0 zombie

Cpu(s): 41.7% us,  2.4% sy,  0.0% ni, 32.4% id, 23.3% wa,  0.2% hi,  0.0% si

Mem:  33275268k total, 32646440k used,   628828k free,    28560k buffers

Swap:  6144744k total,   877804k used,  5266940k free,  7816596k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 

14354 wls81     15   0  717m 667m 1720 S 81.7  2.1  20572:58 java                                   4003 wls81     16   0  703m 670m 1724 S 63.4  2.1  14792:05 java                                   22416 wls81     16   0  381m 348m 1720 S 16.6  1.1 164:43.26 java                                 6389 wls81     15   0  244m 213m 1756 S  7.0  0.7   4909:44 java  

 

第二步:执行kill -3 pid获取thread dump日志(pid就是第一步获取到的)。                         其次:获取线程信息

大多数服务器应用都是多线程,因此必须查到具体是哪些线程占用的CPU高。通过top –H命令可以查看到应用程序的线程信息及占用CPU的情况。

如下所示:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

 4280 nbg-syst  18   0 3608m 2.0g  21m R 93.6 25.9   5004:49 java 

 4279 nbg-syst  18   0 3608m 2.0g  21m R 92.6 25.9   4876:40 java 

 4281 nbg-syst  18   0 3608m 2.0g  21m R 92.6 25.9   3892:54 java 

 4282 nbg-syst  18   0 3608m 2.0g  21m R 91.2 25.9   4954:40 java 

 4244 nbg-syst  15   0 3608m 2.0g  21m S  3.3 25.9 168:34.04 java                             

PID所在的列即是对应的线程ID,这是十进制的。               

       最后:找到耗费CPU高的线程及对应的源代码

取上面耗费CPU最高的第一行的PID 4280,将其转化为十六进制得到0x10b8。然后在thread dump日志中搜索0x10b8,将会搜到如下信息:

"Stack.ClientSelector-1" daemon prio=10 tid=0x000000004baeec00 nid=0x10b8 runnable [0x0000000053169000..0x0000000053169c90]

   java.lang.Thread.State: RUNNABLE

       at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)

       at sun.nio.ch.EPollArrayWrapper.poll(Unknown Source)

       at sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)

       at sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)

       - locked <0x00002aaac4105468> (a sun.nio.ch.Util$1)

       - locked <0x00002aaac4131670> (a java.util.Collections$UnmodifiableSet)

       - locked <0x00002aaac3f79c78> (a sun.nio.ch.EPollSelectorImpl)

       at sun.nio.ch.SelectorImpl.select(Unknown Source)

       at com.****x

性能分析有两点需要注意:

1、dump文件(多个,不是一个,一个只是一个瞬间的),比较多个dump之间没有变化的线程,即阻塞的线程(可能有问题的)

2、针对内存要做threaddump看内存分布 或者加gc参数,查看的dump文件必须是针对业务应用对应的线程

 

java线程dump分析:

http://blog.csdn.net/yangjun2/article/details/6874599

http://www.linuxidc.com/Linux/2009-01/18171.htm

http://blog.csdn.net/zhaolingzhi55/article/details/8683161

http://blog.csdn.net/rachel_luo/article/details/8920596

分享到:
评论

相关推荐

    java thread dump 分析

    Java Thread Dump 分析 Java Thread Dump 分析是 Java 应用程序性能优化的重要工具之一。Thread Dump 是 JVM 的一个快照,记录了当前所有线程的状态,包括线程的 ID、名称、状态、锁信息等。通过分析 Thread Dump,...

    java 线程 dump 分析工具 2.3.3

    java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的...

    Java thread dump analyzer (tda)

    Java线程分析工具(TDA)是一款专为Java开发者设计的强大工具,用于解析和理解Java应用程序的线程转储(thread dump)。线程转储是Java虚拟机(JVM)在特定时刻生成的一种快照,其中包含了应用程序中所有活动线程的状态...

    java 内存dump分析和thread dump(java core)分析

    Java内存dump分析和Thread Dump(Java Core)是Java性能调优中的重要环节,它们能帮助开发者定位和解决系统中的各种问题,如内存泄漏、线程阻塞等。下面将详细介绍这两个概念及其分析工具。 首先,Java堆内存dump,...

    IBM java coredump(threaddump) analyzer

    IBM最新java threaddump 分析工具 java -jar jca.jar -Xmx1024m jca.jar

    Java Thread Dump Analyzing

    Java Thread Dump Analyzing

    IBM thread dump文件分析工具

    在Java虚拟机(JVM)的运行过程中,有时会出现性能问题或者系统挂起的情况,这时候我们需要深入了解线程的运行状态,这就是"IBM thread dump文件分析工具"的作用所在。线程dump文件是JVM在特定时刻生成的一种快照,...

    JAVA线程dump的分析

    JAVA线程dump分析的步骤包括: 1. 了解线程状态:线程可以是Runnable、Waiting、 Blocked或Zombie状态,了解线程当前的状态能够帮助诊断问题。 2. 分析线程调用堆栈:线程调用堆栈可以帮助开发者了解程序的执行...

    用Java thread dump 去分析程序的问题

    Java线程转储(Thread Dump)是诊断Java应用程序性能问题和异常情况的重要工具。它提供了一个运行中的Java应用中所有线程的快照,详细显示每个线程的状态、堆栈跟踪以及线程名称。线程状态包括RUNNABLE、BLOCKED、...

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    java Thread Dump Lockness检查死锁

    java Thread Dump 其实就是stack trace。 我们平时经常会碰见java异常,并且得到异常的方法用e.printstacktrace 实际上程序正常运行时也是会有stack trace的,只不过平时不显示出来而已。如何能正常及时显示堆栈信息...

    好用的线程dump分析工具

    好用的线程dump分析工具

    java故障排查ThreadDump

    当Java应用程序出现性能问题、死锁或者线程阻塞等情况时,Thread Dump分析就显得尤为重要。以下是对如何进行Java故障排查,特别是利用Thread Dump进行问题定位的详细说明: 1. **获取Thread Dump** - 使用JDK自带...

    IBM Thread and Monitor Dump Analyzer for Java (jca) 线程分析工具

    IBM提供的分析javacore和dump的内存分析工具,非常...分析线程情况 JavaCore 或 ThreadDump文件,即线程的映像,用来分析线程资源锁等情况, 可参考:https://blog.csdn.net/weixin_34129696/article/details/85868951

    IBM Thread and Monitor Dump Analyzer for Java (jca) 线程分析工具 jca45

    IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar

    Thread Dump Analyzer

    线程Dump分析器,简称TDA,是一款专业工具,专门设计用于解析和分析Java应用程序的线程转储(Thread Dump)文件。线程转储是在特定时间点应用程序中所有线程的状态快照,它包含了每个线程的详细信息,如线程ID、线程...

    TDA-Thread Dump Analyzer - tda-bin-2.3.3.zip

    **线程Dump分析工具——TDA (Thread Dump Analyzer)** 在Java应用程序的开发和运维过程中,线程分析是一项至关重要的任务。当系统出现性能问题、响应缓慢或无响应时,通常需要通过分析线程Dump来查找原因。TDA...

    javacore\heapdump文件分析工具

    2. 将Websphere生成的`javacore`文件和对应的`thread Dump`文件放置在同一目录下。 3. 运行`jca`工具,指定`javacore`文件路径。 4. 审查`jca`生成的报告,查找可能导致问题的线程和代码片段。 在分析过程中,应...

    IBM Thread Dump Analyzer

    IBM 线程堆栈分析工具,IBM Thread and Monitor Dump Analyzer for java

Global site tag (gtag.js) - Google Analytics