如何抓取Thread Dump小结(转)

当系统性能出现问题时,需要从各个方面来查看网络环境、主机资源、查看最经变更的代码等。如果是想从代码层面解决问题,那么最有效的方法就是查看相关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

 

时间: 2024-10-21 14:04:20

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

Java中抓取 Thread Dumps 的方式汇总_java

Thread dumps(线程转储)能帮助我们判断 CPU 峰值.死锁.内存异常.应用反应迟钝.响应时间变长和其他系统问题.一些在线的分析工具比如 http://fastthread.io/ 也能帮助我们分析和定位问题,但是这些工具都要求有一个 dump 文件.因此在这篇文章当中,我总结了7中抓取 Java Thread Dumps 文件的方式. 1. jstack jstack 是一个抓取 thread dump 文件的有效的命令行工具,它位于 JDK 目录里的 bin 文件夹下(JDK_HO

windows-Windows下抓取程序崩溃的Dump文件 遇到的问题

问题描述 Windows下抓取程序崩溃的Dump文件 遇到的问题 在Windows环境下,程序崩溃的时候抓取Dump文件,经测试在本机的开发环境下及Win 7环境下 抓取都没有问题,而在Xp和Windows 2003下抓取到的Dump文件都是0KB,这是怎么回事, 有哪位仁兄有这方面经验的还请赐教! 解决方案 Python 批量分析windows程序崩溃捕获的dump文件程序崩溃时抓取dump文件windows程序崩溃生成dump文件 解决方案二: 要看你的API是如何生成dump的,可能是用到

PerfView抓取dump和dump比较

PerfView抓取dump和dump比较步骤截图: 其他相关文章: 性能分析工具-PerfView http://www.cnblogs.com/shanyou/p/3773998.html 使用PerfView诊断.Net GC的问题 http://www.cnblogs.com/lenshen/p/3961026.html

如何有效抓取SQL Server的BLOCKING信息

原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12/12/sql-server-blocking.aspx SQL Server允许并发操作,BLOCKING是指在某一操作没有完成之前,其他操作必须等待,以便于保证数据的完整性.BLOCKING的解决方法要查看BLOCKING的头是什么,为什么BLOCKING头上的语句执行的很慢.通常来讲只要我们能

Android软件测试的日志文件抓取简介

1.log文件分类简介 实时打印 的主要有: logcat main , logcat radio , logcat events , tcpdump ,还有高通平台的还会有QXDM 日志 状态信息 的有: adb shell cat /proc/kmsg , adb shell dmesg , adb shell dumpstate , adb shell dumpsys , adb bugreport ,工程模式等 2.LOG抓取详解 l  实时打印 adb logcat -b main -

虫友们该怎么样利用虫虫软件抓取资源

现在做一个网站很容易,后期推广却很难,有可能站长们都有这种感受,至于后期推广不过就是外链+实质内容,实质内容就不说了,chongseo要强调的是 怎么样利用虫虫软件抓取功能,去获取更多的群发外链的资源,如今能做外链的地方并不是很多,不过就是那末几个类型,bbs,zhidao,B2B,分类信 息,收藏夹,等等.下边用虫虫怎么样去抓取资源呢?一起来看下吧! 一.bbs论坛:站长们应当都晓得如今网上比较流行的BBS开源CMS就属discuz,PHPWIND了,站长们建论坛CMS基本都是运用的这种开源

07-爬虫的多线程调度 | 01.数据抓取 | Python

07-爬虫的多线程调度 郑昀 201005 隶属于<01.数据抓取>小节 一般让爬虫在一个进程内多线程并发,有几种方法: Stackless :Stackless Python是Python的一个增强版本.Stackless Python修改了Python的代码,提供了对微线程的支持.微线程是轻量级的线程,与前边所讲的线程相比,微线程在多个线程间切换所需的时间更多,占用资源也更少. Twisted :主要利用 Twisted 中的异步编程能力.如 addCallback , callLater

玩玩小爬虫——抓取动态页面

       在ajax横行的年代,很多网页的内容都是动态加载的,而我们的小爬虫抓取的仅仅是web服务器返回给我们的html,这其中就 跳过了js加载的部分,也就是说爬虫抓取的网页是残缺的,不完整的,下面可以看下博客园首页 从首页加载中我们看到,在页面呈现后,还会有5个ajax异步请求,在默认的情况下,爬虫是抓取不到这些ajax生成的内容的, 这时候要想获取就必须调用浏览器的内核引擎来下载这些动态页面,目前内核引擎三足鼎立. Trident: 也就是IE内核,WebBrowser就是基于该内核,

Nutch 2.2+MySQL+Solr4.2实现网站内容的抓取和索引

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.  -------------------------------------------------------- 原文地址: http://blog.sin