[[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

分析结果示例:









【Java】线程转储分析 ThreadDump的更多相关文章

  1. 获取Java线程转储的常用方法

    1. 线程转储简介 线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照. 线程转储一般使用文本格式, 可以将其保存到文本文件中, 然后人工查看和分析, 或者使用工具/API自动分 ...

  2. Java 线程转储 [转]

    http://www.oschina.net/translate/java-thread-dump java线程转储 java的线程转储可以被定义为JVM中在某一个给定的时刻运行的所有线程的快照.一个 ...

  3. Java 线程转储

    软件维护是一个枯燥而又有挑战性的工作.只要软件功能符合预期,那么这个工作就是好的.设想一个这样的情景,你的电话半夜也一直在响(这不是一个令人愉快的感受,是吧?)任何软件系统,无论它当初是被设计的多好, ...

  4. Java线程问题分析定位

    Java线程问题分析定位 分析步骤: 1.使用top命令查看系统资源占用情况,发现Java进程占用大量CPU资源,PID为11572: 2.显示进程详细列表命令:ps -mp 11572 -o THR ...

  5. Java问题定位之Java线程堆栈分析

    采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子.系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因 ...

  6. java线程池分析和应用

    比较 在前面的一些文章里,我们已经讨论了手工创建和管理线程.在实际应用中我们有的时候也会经常听到线程池这个概念.在这里,我们可以先针对手工创建管理线程和通过线程池来管理做一个比较.通常,我们如果手工创 ...

  7. java线程dump分析工具

    jstack和线程dump分析  java程序性能分析之thread dump和heap dump 一.[内存dump] jmap –dump:live,format=b,file=heap.bin ...

  8. Java线程堆栈分析

    不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面.老话说得好,机会是留给有准备的人的,因此,开始计划看一些Java底层一点的东西,尝试开始在学 ...

  9. 使用jstack和TDA进行java线程dump分析

    转载:http://blog.csdn.net/everlasting_188/article/details/51943095 1.jstack重点关注 命令行:jstack [-l][F] pid ...

随机推荐

  1. Arrays 类的 binarySearch() 数组查询方法详解

    Arrays类的binarySearch()方法,可以使用二分搜索法来搜索指定的数组,以获得指定对象.该方法返回要搜索元素的索引值.binarySearch()方法提供多种重载形式,用于满足各种类型数 ...

  2. HDU 1716:排列2(全排列)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. php 中使用正则

    1.匹配一个由一个小写字母和一位数字组成的字符串,比如”z2″   用^[a-z][0-9]$ 2.当在一组方括号里使用^是,它表示“非”或“排除”的意思   比如要求第一个字符不能是数字:^[^0- ...

  4. js的数据类型。

    字符串   String 数字    Number 布尔    Boolean Null     空 Undefined Object   对象  Array 数组   json   function ...

  5. PyCharm下载安装

    PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍一下 PyCharm 在 Windows下是如何安装的. 这是 ...

  6. eventEmitter

    wade-mac:fin_server_invest mac$ node > var events =require('events') undefined > var eventEmit ...

  7. 4.input()

    >>> help(input) Help on built-in function input in module builtins: input(prompt=None, /) R ...

  8. day 57 jQuery的补充

    .data() 在匹配的元素集合中的所有元素上存储任意相关数据或返回匹配的元素集合中的第一个元素的给定名称的数据存储的值. .data(key, value): 描述:在匹配的元素上存储任意相关数据. ...

  9. List的Capacity,了解一下

    之前在开发中只用到List的时候几乎就是拿过来就用,从来没有考虑过List的内存分配问题,试想一个有10万元素的List的在构造和添加元素时内存是如何变化的呢?在MSDN上关于List的Capacit ...

  10. mongo之 ReadConcern 与 Read Preference

    一.读取关注(readConcern) 官方文档 3.2版本以后支持读取关注 读取关注允许您控制从副本集和副本集分片读取的数据的实时性,一致性和隔离性. 通过有效使用写入关注和读取关注,可以适当调整一 ...