20309 发表于 2018-1-6 12:32:12

【Java】线程转储分析 ThreadDump

[[TOC]]
  通过分析 ThreadDump 来查询Java程序运行情况

获取线程转储文件
  有多种方式可以获取转储文件,可参考链接HOW TO TAKE THREAD DUMPS? – 8 OPTIONS。
  下面介绍 jps+jstack的方式获取 ThreadDumps

步骤1:查看当前虚拟机所有进程
  

jps -l  

  

  output如下:
  

46832 com.chinamobile.epic.MgmtApplication  
16900 org.jetbrains.idea.maven.server.RemoteMavenServer
  
38980 sun.tools.jps.Jps
  
43828 org.jetbrains.jps.cmdline.Launcher
  
9544
  

  其中 ++46832 com.chinamobile.epic.MgmtApplication++ 为将要分析的程序程序;

步骤2:使用jstack获取转储文件
  指令:
  

jstack -l<pid> > <file-path>  

  example: 得到转储文件 threaddump-46832.txt
  

jstack -l 46832 > threaddump-46832.txt  

在k8s中获取srv的 threaddump

1. 获取服务名
  

kubectl get pod | grep mgmt  

  
output:
  
epic-mgmt-254096307-np82s                  1/1       Running            0          46m
  

2. 进入服务
  

kubectl exec -it epic-mgmt-254096307-np82s /bin/sh  

3. jps -l 获取进程ID
  

# jps -l  
1 /epic-mgmt.jar   # pid=1
  
1036 sun.tools.jps.Jps
  

4.获取 Threaddump
  

// 导出到 Threaddump010.txt  
jstack -l 1 > /var/lib/docs/mgmt/epic-mgmt-threaddump010.txt
  

  之所以导出到那个目录,因为 如下配置文件:(完成k8s的目录到 linux目录的映射)
  

...省略...  containers:
  - image: 10.254.9.21/library/epic-mgmt:0.1.16
  name: epic-mgmt
  volumeMounts:
  - mountPath: "/var/lib/docs"
  name: epic-docs
  - mountPath: "/var/log/epic"
  name: epic-logs
  ports:
  - containerPort: 8028
  name: mgmt
  volumes:
  - name: epic-docs
  hostPath:
  path: "/opt/data/docs"
  - name: epic-logs
  hostPath:
  path: "/opt/data/logs"
  
...省略...
  

分析 ThreadDump
  使用在线工具:
  
http://fastthread.io
  
https://images2017.cnblogs.com/blog/731047/201709/731047-20170906164056069-818135380.png

分析结果示例:
https://images2017.cnblogs.com/blog/731047/201709/731047-20170906164400413-584380544.png
  
https://images2017.cnblogs.com/blog/731047/201709/731047-20170906164405179-1318972514.png
  
https://images2017.cnblogs.com/blog/731047/201709/731047-20170906164410054-1277421804.png
  
https://images2017.cnblogs.com/blog/731047/201709/731047-20170906164421507-1279007898.png
  
https://images2017.cnblogs.com/blog/731047/201709/731047-20170906164429507-1673273113.png
页: [1]
查看完整版本: 【Java】线程转储分析 ThreadDump