[原创]线程快照的相关内容介绍_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2976 | 回复: 2   主题: [原创]线程快照的相关内容介绍        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2015-7-15 15:58:46 | [全部帖] [楼主帖] 楼主

线程快照的相关内容介绍

Java线程堆栈是一个运行中的Java应用程序的所有线程的一个快照。它会显示一些像当前的堆栈跟踪、状态以及线程名称之类的信息。线程列表中包括由JVM本身创建的线程(负责垃圾收集、信号处理等管理工作)和由应用程序创建的线程。

一、做线程快照的方法

1、直接使用命令

在 windows环境中,

在启动程序的控制台里敲: Ctrl + Break,线程的 dump会产生在标准输出中( 缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件),之后需要将线程堆栈复制到文件中

在 unix, linux和 MacOS 环境中,

在控制台中敲: Ctrl-\,或者,用 “kill -3 <pid>” ,或者 “kill – QUIT <pid>”。 Pid是用所关注的 JAVA进程号,您可以用 “ps -ef   grep java” 找到,或者使用 JDK 5.0中的 “jps -v” 命令获得。kill -3 <pid> 该命令会直接将线程快照显示在控制台上,注意一定要谨慎一步不慎就可能让服务器进程被杀死!

l 在各个操作系统平台,都可以用 JDK 自带命令行工具包中的 jstack <pid> 。 (进入到jdk安装目录bin下,使用 ./jstack <pid> > dump.txt 可以线程快照重定向到文件中)


2、使用 VisualVM (推荐)-3-

VisualVM 是一个性能分析工具,自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下。VisualVM 自身要在 JDK6 以上的版本上运行,但是它能够监控 JDK1.4 以上版本的应用程序。

打开方法:进入到jdk安装目录bin下,输入 ./jvisualvm , 即可打开该应用程序。

我们可以使用 VisualVM 快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析。快照为捕获应用程序性能分析数据提供了一个很便捷的方式因为快照一旦生成可以在任何时候离线打开和查看,也可以相互传阅。

VisualVM 提供了两种类型的快照:

Profiler 快照:当有一个性能分析会话(内存或者 CPU)正在进行时,我们可以通过性能分析结果工具栏的快照按钮生成 Profiler 快照捕获当时的性能分析数据。

图 1. Profiler 快照

北京联动北方科技有限公司

应用程序快照:我们可以右键点击左侧 Applications 窗口中应用程序节点,选择应用程序快照为生成一个应用程序快照。应用程序快照会收集某一时刻的堆转储,线程转储和 Profiler 快照,同时也会捕获 JVM 的一些基本信息。

图 2应用程序快照

北京联动北方科技有限公司

3、使用WebLogic 自带的获取 thread dump的工具:

1). 使用 Admin Console 

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

b. 点击Server Monitoring Threads

c. 点击: Dump Thread Stack 按钮

2). 使用WLST (WebLogic Scripting Tool) 

java  weblogic.WLST
connect('weblogic','weblogic123','t3://dggtsebs01-vlx:7010')
cd('Servers')
cd('soa_server1')
threadDump()
disconnect()
exit()


注意线程堆栈将会保存在运行wlst的当前目录下.

WLST 脚本获取ThreadDump

① 创建WLST脚本:Threaddump.py

serverName = 'AdminServer'
counter = 0
sleepTime = 5000   #Threaddump时间间隔是5
connect ('weblogic','weblogic','t3://localhost:7001')
for counter in range(3):  #3Threaddump
java.lang.Thread.sleep(sleepTime)
fileName = 'dump' + serverName + '_' + (java.util.Calendar.getInstance().getTimeInMillis()).toString() + '.dmp'  #Threaddump文件名
threadDump('true', fileName, serverName)


② 调用脚本 

java weblogic.WLST ThreadDumps.py

4、使用JProfiler:商业软件,需要付费。功能强大。

JProfiler是一款Java的性能监控工具。可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应用内存使用得热点,即:哪个对象占用的内存比较多;或者CPU热点,即:哪儿方法占用的较大得CPU资源

5Jconsole :

JConsole是一个基于JMXGUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。。下面以对tomcat的监控为例,带领大家熟悉Jconsole这个工具。

  Step 1,在dos/bash命令下输入:jconsole

Step 2,在弹出的对话框中选中apache,并点击connect(假设你的tomcat已经启动);

北京联动北方科技有限公司

接下来,你就能使用jconsole来做一些简单的性能监控了。

JConsole监控系统内存变化情况,如果有内存溢出的话,垃圾回收将会呈现锯齿状。

二、分析线程快照的方法

1IBM Thread and Monitor Dump Analyzer (TMDA)-8- (推荐)

分析一个或多个 Java 线程转储或 javacoreJavacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照),并诊断监视器锁和线程活动,以便确定挂起、死锁和资源争用或监视器瓶颈的根源。

输入:用于显示相关线程历史记录的单个或多个 javacore ,如javacore.*.txt

输出:基于 GUI 的视图

使用该工具的问题类型:崩溃、挂起、性能瓶颈、JVM 意外终止

启动方法:<Java Runtime Environment path>java -Xmx500m -jar jca457.jar 或者 双击jca457.jar

2HeapAnalyzer

HeapAnalyzer 读取单个 Java 内存转储(堆转储),并使您能够浏览转储以查看其内容。此工具是下面的 Memory Dump Diagnostic for Java (MDD4J) 工具(3) 的前身,后者现在包含前者的大多数功能。当时,HeapAnalyzer 中的原始树浏览功能比在 MDD4J 中更加灵活。另一方面,HeapAnalyzer 缺乏 MDD4J 中的某些更完善的泄露嫌疑检测算法,并且不支持多个转储的比较分析。

输入:单个 java 堆转储 ,如heapdump.txt

输出:可疑对象的图形视图和堆浏览器 

支持:按原样提供的工具。

3Memory Dump Diagnostic for Java (MDD4J)

分析正在运行 WebSphere Application Server 或任何其他独立 Java 应用程序的 JVM 中常见格式的内存转储(堆转储)。内存转储分析旨在确定 Java 堆中可能是内存泄露根源的数据结构。该分析还确定应用程序的 Java 堆占用空间的主要肇事者和它们的所属关系。此工具能够分析从遇到 OutOfMemoryError 问题的生产环境应用程序服务器中获得的非常大的内存转储(将需要 2 GB 或更多的 RAM)。MDD4J 扩展了上面较旧的 IBM HeapAnalyzer (2) 的功能,尽管两个工具的用户界面完全不同。 

输入:来自虚拟机 (JVM) 的内存转储(堆转储) 

输出:交互式报告,其中显示主要的内存泄露可疑之处,以及有关这些泄露的详细信息。 

其他功能:操作单个转储。有些版本提供了多个转储的比较分析。 

支持:此工具由 IBM 提供支持,目前是用于其所在领域的主要工具。

4开源Thread Dump分析工具TDA (推荐)

开源免费的JVM TD日志分析工具支持JConsoleVisualVM插件

相关演示视频:

http://www.beansoft.biz/wp-content/uploads/2011/08/tda.swf


三、其他参考资料

以下资料是对于上面的内容的补充与扩展。

1JAVA线程dump的分析 --- jstack pid

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


2java虚拟机常用命令工具  http://learnworld.iteye.com/blog/1381949

3、使用 VisualVM 进行性能分析及调优 

http://www.ibm.com/developerworks/cn/java/j-lo-visualvm/


4JVM调优工具  http://pengjiaheng.iteye.com/blog/552456

5、常用 Java Profiling 工具的分析与比较 

http://www.ibm.com/developerworks/cn/java/j-lo-profiling/


6Java自带的GUI性能监控工具Jconsole以及JvisualVM简介

http://blog.csdn.net/chendc201/article/details/22905503


7、 JProfiler试用手记 http://blog.csdn.net/chendc201/article/details/22905513

8、通过 Javacore 诊断线程挂起等性能问题 (TMDA介绍)

http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy_javacore.html


9、用于 JVM 生成的信息的工具

http://www.ibm.com/developerworks/cn/websphere/techjournal/0807_supauth/0807_supauth.html


10、使用WebLogic.Admin 做线程快照 

http://blog.csdn.net/forest_hou/article/details/5468239


11、如何抓取Thread Dump小结 

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


12、使用VisualVM远程监控WebLogic服务器JVM  http://www.beansoft.biz/?p=1809

13、开源Thread Dump分析工具TDA  http://www.beansoft.biz/?p=2121

14JDK的几种分析工具  http://blog.csdn.net/hantiannan/article/details/4651617




赞(0)    操作        顶端 
arcona
注册用户
等级:少校
经验:1100
发帖:10
精华:0
注册:2015-6-1
状态:离线
发送短消息息给arcona 加好友    发送短消息息给arcona 发消息
发表于: IP:您无权察看 2016-8-8 9:29:27 | [全部帖] [楼主帖] 2  楼

学习了



赞(0)    操作        顶端 
arcona
注册用户
等级:少校
经验:1100
发帖:10
精华:0
注册:2015-6-1
状态:离线
发送短消息息给arcona 加好友    发送短消息息给arcona 发消息
发表于: IP:您无权察看 2016-8-8 9:29:27 | [全部帖] [楼主帖] 3  楼

学习了



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论