当系统性能出现问题时,需要从各个方面来查看网络环境、主机资源、查看最经变更的代码等。如果是想从代码层面解决问题,那么最有效的方法就是查看相关dump文件。
如果是使用IBM JDK(我默认你是在aix环境下),那么可以使用kill -3 “进程号”,这种恐吓的方式来生成dump文件。可以用IBM提供的工具jca.jar来查看Thread dump文件。利用IBM 提供的heap分析工具。
javacore文件(关于cpu的)和heapdump文件(关于内存的)

tips:IBM jdk1.6下没有jstack工具

oracle jdk下,我们通过以下步骤完成上面两个dump文件的分析。
对于heapdump文件可以大致分为三个步骤操作:
1、查看java相关进程的ID
C:\Users\jiangwh>jps
1864 Jps
1464 JConsole
2、创建heapdump文件
C:\Users\jiangwh>jmap -dump:format=b,file=jconsole.dump 1464
Dumping heap to C:\Users\jiangwh\jconsole.dump ...
Heap dump file created
3、分析heapdump文件
C:\Users\jiangwh>jhat jconsole.dump
Reading from jconsole.dump...
Dump file created Thu May 23 21:37:28 CST 2013
Snapshot read, resolving...
Resolving 105445 objects...
Chasing references, expect 21 dots.....................
Eliminating duplicate references.....................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
通过浏览器访问http://localhost:7000/ 可以获取当前内存中创建的对象,这个明显没有IBM的分析工具好,IBM的工具可以从ROOT一直分析到最后一个有关联的对象,对象出现统计的也比较好,比较直观!
对于threaddump文件查看是比较单间的,直接使用jstack命令去搞定。jstack 1464 其中1464为java进程的id。
分析性能时的其他工具。在Oracle的jdk中还有一个jstat命令,利用该命令可以查看jvm的gc情况
jstat -gc 1464 20 10 该语句表示对线程1464进行gc监控每20ms一次,共计执行10次
http://www.2cto.com/kf/201306/223734.html

当服务器挂起,崩溃或者性能底下时,就需要抓取服务器的线程堆栈(Thread Dump)用于后续的分析.
Thread dump提供了当前活动的线程的快照. 它提供了JVM中所有Java线程的栈跟踪信息
有很多方式可用于获取Thread Dump, 一些是操作系统特定的命令.

操作系统命令获取ThreadDump:

Windows:
1.      转向服务器的标准输出窗口并按下Control + Break组合键, 之后需要将线程堆栈复制到文件中

UNIX/ Linux

首先查找到服务器的进程号(process id), 然后获取堆栈.

1.      ps –ef  | grep java

2.      kill -3 <pid>

注意一定要谨慎, 一步不慎就可能让服务器进程被杀死!

JVM 自带的工具获取线程堆栈:

JDK自带命令行工具获取PID并做ThreadDump:

1.         jps

2.         jstack <pid>

使用JVisualVM:

Threads 标签页àThreadDump按钮.

WebLogic 自带的获取 thread dump的工具:

1. webLogic.Admin 工具

a. 打开命令提示符, 通过运行<DOMAIN_HOME>/bin/setDomain.env设置相关类路径

b. 执行下面的命令

java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic1 THREAD_DUMP

注意: Thread Dump 会打印到标准输出, 如nohup日志或者进程窗口.

2. 使用 Admin Console

a. 登录 Admin Console , 点击对应的服务器

b. 点击Server à Monitoring àThreads

c. 点击: Dump Thread Stack 按钮

3. 使用WLST (WebLogic Scripting Tool)

connect(‘weblogic’,'weblogic1’,’t3://localhost:7001’)
cd(‘Servers’)
cd(‘AdminServer’)
threadDump()
disconnect()
exit()
注意: 线程堆栈将会保存在运行wlst的当前目录下.

4. 使用utils.ThreadDumper

用法:

C:\bea\wlserver_10.3\server\lib>java -cp weblogic.jar utils.ThreadDumper

Broadcast Thread dumps disabled: must specify weblogic.debug.dumpThreadAddr and

weblogic.debug.dumpThreadPort

Exception in thread "main" java.lang.IllegalArgumentException: Port out of range

:-1

at java.net.DatagramPacket.setPort(Unknown Source)

at java.net.DatagramPacket.<init>(Unknown Source)

at java.net.DatagramPacket.<init>(Unknown Source)

at utils.ThreadDumper.sendDumpMsg(ThreadDumper.java:124)

at utils.ThreadDumper.main(ThreadDumper.java:145)

5. 如果服务器是作为Windows服务的方式运行, 请运行下列命令:

WL_HOME\bin\beasvc -dump -svcname:service-name

其它一些获取Thread Dump的工具有jrcmd, jrmc(JRockit VM自带) ,Samurai, JProfiler等, 还可通过JMX编程的方式获取, 如JDK自带示例代码:

$JAVA_HOME\demo\management\FullThreadDump

http://www.blogjava.net/beansoft/archive/2011/12/30/367584.html

http://blog.sina.com.cn/s/blog_5f53615f0100zllb.html

http://www.blogjava.net/jzone/articles/303979.html

http://blog.sina.com.cn/s/blog_6ed93640010114a4.html

如何抓取Thread Dump小结(转)的更多相关文章

  1. Java 抓取 thread dump (Full Thread Stack Trace) 方法汇总

    顾名思义,表示一个时间点上,显示进程里面每一个线程的 stack trace,以及线程之间关联,比如等待 常用来定位一些 不响应,CPU 很高,内存使用很高问题 汇总表格如下 工具 操作系统 Java ...

  2. Adplus 抓取Crash Dump

    本实例在win8.1 安装window kits https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit 1 ...

  3. 性能分析之-- JAVA Thread Dump 分析综述

    性能分析之-- JAVA Thread Dump 分析综述       一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工 ...

  4. thread dump

    最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下. 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Du ...

  5. [JAVA]JAVA章4 Thread Dump如何分析

    一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread- ...

  6. 性能分析之– JAVA Thread Dump 分析

    最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下. 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Du ...

  7. (转)性能分析之-- JAVA Thread Dump 分析综述

    原文链接:http://blog.csdn.net/rachel_luo/article/details/8920596 最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相 ...

  8. java之Thread Dump分析

    什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机 ...

  9. 【性能诊断】五、并发场景的性能分析(windbg简介及dump抓取)

    windbg简介 Windbg是在windows平台下,强大的用户态和内核态调试工具.相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能 ...

随机推荐

  1. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  2. Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...

  3. VS2008编译iconv静态链接库

    iconv是将一种编码格式转换为还有一种编码格式的开源库,比如能够把Windows环境下通用的ASCii(中文是GB2312)编码转换为国际通用的Unicode编码 iconv最新版本号仅仅支持Min ...

  4. js推断指定函数、变量是否存在的方法

    //推断是否存在指定函数 function isExitsFunction(funcName) { try { if (typeof (eval(funcName)) == "functio ...

  5. 百度复制SQL语句

    本词条从基础知识.判断对象和应用技巧等方面,介绍了SQL(Structured Query Language)结构化查询语言的应用方法. 目录 1基础 ▪ 创建数据库▪ 删除数据库▪ 备份sql se ...

  6. 修改页面中所有TextBox控件的样式--CSS

    1.HTML <div> TextBox<br /> <input type="text" name="name" value=& ...

  7. Xcode - 内存分析

    内存分析工具 1. ARC中的内存泄露 1. 一般内存分析, 主要是看看有没有内存泄露 2. 内存泄露: 创建了对象, 使用完毕没有释放, 将来就可能造成内存泄露 3. 内存泄露: 主要用于MRC的内 ...

  8. 一个简单链表的C++实现

    /* LList.cpp * Author: Qiang Xiao * Time: 2015-07-12 */ #include<iostream> using namespace std ...

  9. 「C」 函数、运算、流程控制

    一.函数 (一)什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”. (二)函数的定义 目的:将一个常用的功能封装起来,方 ...

  10. [Swust OJ 772]--Friend(并查集+map的运用)

    题目链接:http://acm.swust.edu.cn/problem/772/ Time limit(ms): 1000 Memory limit(kb): 65535    Descriptio ...