首页 » 网站推广 » phpthreaddump技巧_Java ThreadDump 生成解析

phpthreaddump技巧_Java ThreadDump 生成解析

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

当有我们的做事器CPU资源利用率(usr%)较高时,或者是一个基于 JAVA 的 Web 运用运行的比预期慢的时候,我们须要利用 Thread Dumps进行剖析。
线程转储是诊断CPU尖峰,去世锁,相应韶光差,内请安题,运用程序无相应以及其他系统问题的一项主要事情或者环节。

Thread Dump是非常有用的诊断Java运用问题的工具。
每一个Java虚拟机都能够以不同的形式及时天生所有线程在某一点状态的Thread-Dump的能力,它能够给我们供应当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一样平常包含完全的类名及所实行的方法。
常日以文件的形式持久化到磁盘中。

phpthreaddump技巧_Java ThreadDump 生成解析

1、Jstack

phpthreaddump技巧_Java ThreadDump 生成解析
(图片来自网络侵删)

Jstack是捕获线程转储的有效命令行工具。
Jstack工具在$JAVA_HOME/bin目录中供应。
此处为捕获线程转储所需发出的命令旗子暗记:

[administrator@JavaLangOutOfMemory luga ]% jstack -l <pid>> <文件路径>pid:是运用程序的进程ID,应捕获其线程转储file-path:是将写入线程转储的文件路径

详细地:

[administrator@JavaLangOutOfMemory luga ]% jstack -l 18790 > javacore.txt

按照如上示例实行,该过程的线程转储信息将在/data/logs/目录下以javacore.txt文本形式天生并进行展示。
自Java 5以来,JDK中已包含Jstack工具。
如果运行在旧版Java中,请考虑利用其他选项。

2、Kill

在大型企业中,出于安全缘故原由,只有JRE安装在生产机器上。
由于Jstack和其他工具只是JDK的一部分,因此有的时候无法利用Jstack工具。
在这种情形下,可以利用“ kill -3”选项。

[administrator@JavaLangOutOfMemory luga ]% kill -3 <pid>pid:是运用程序的进程ID,应捕获其线程转储

详细地:

[administrator@JavaLangOutOfMemory luga ]% kill -3 18790

利用“ kill -3”选项时,线程转储将发送到标准缺点流。
如果我们在Tomcat Web容器中运行运用程序,则线程转储将发送到<TOMCAT_HOME> /logs/catalina.out文件中。

备注:目前,大多数 nix操作系统(Unix,Linux,HP-UX操作系统)都支持此选项。
其他操作系统暂未在生产环境实践。

3、Java VisualVM

Java VisualVM是一种图形用户界面临象,可在运用程序在指定的Java虚拟机(JVM)上运行时供应有关运用程序的详细信息。
它位于$JAVA_HOME/bin/jvisualvm.exe中。
自JDK 6更新7.S起,它是Sun JDK发行版的一部分。

启动Jvisualvm。
在左侧面板上,我们会把稳到打算机上正在运行的所有Java运用程序。
我们须要从列表中选择所支配的运用程序。
除此之外,此工具还具有从远程主机上运行的java进程捕获线程转储的功能。

4、JMC

Java Mission Control(JMC)是一种工具,可以从本地运行或支配在生产环境中的Java运用程序网络和剖析数据。
自Oracle JDK 7 Update 40起,此工具已打包到JDK中。
该工具还供应了从JVM进行线程转储的选项。
位于$JAVA_HOME/bin/jmc.exe目录下。

启动该工具后,我们将看到本地主机上正在运行的所有Java进程。
把稳:JMC还可以与远程主机上运行的Java进程连接。
现在,在左侧面板上,单击要进行线程转储的Java进程下方列出的“ Flight Recorder”选项。
现在,我们将会看到“开始翱翔记录”引导,如下图所示:

5、Jconsole

Jconsole是JDK自带的监控工具,在$JAVA_HOME/bin目录下可以找到。
它用于连接正在运行确当地或者远程的JVM,对运行在java运用程序的资源花费和性能进行监控,并画出大量的图表,供应强大的可视化界面。
而且本身占用的做事器内存很小,乃至可以说险些不消耗。

JConsole 是一个内置 Java 性能剖析器,可以从命令行(直接输入jconsole)或在 GUI shell ($JAVA_HOME/bin下打开)中运行。
它用于对JVM中内存,线程和类等的监控。
可利用JTop插件。
它可以监控本地的Jvm,也可以监控远程的Jvm,也可以同时监控几个Jvm。

这款工具的好处在于,占用系统资源少,而且结合Jstat,可以有效监控到java内存的变动情形,以及引起变动的缘故原由。
在项目追踪内存透露问题时,很实用。

6、ThreadMXBean

从JDK 1.5开始,引入了ThreadMXBean。
这是Java虚拟机中线程系统的管理接口。
利用此接口,我们还可以天生线程转储。
同时只需编写几行代码即可以编程办法天生线程转储。
下面是ThreadMXBean实现的框架实现,该实现从运用程序天生Thread Dump。

public void dumpThreadDump() { ThreadMXBean threadMxBean = ManagementFactory.getThreadMXBean(); for (ThreadInfo ti : threadMxBean.dumpAllThreads(true, true)) { System.out.print(ti.toString()); } }

7. APM工具– App Dynamics

很少有运用程序性能监视工具供应天生线程转储的选项。
如果要通过App Dynamics(APM工具)监视运用程序,则以下是捕获线程转储的解释:

1、创建一个动作,在“创建动作”窗口中选择“诊断”->“实行线程转储”。

2、输入操作名称,要采样的数量以及线程转储之间的间隔(以毫秒为单位)。

3、如果要在启动线程转储操作之前须要批准,请选中“在此操作之前须要批准”复选框,然后输入被授权批准该操作的个人或组的电子邮件地址。
有关更多信息,请拜会须要批准的操作。

4、单击确定。

如下所示:

8、JCMD

Jcmd工具是随Oracle Java 7引入的。
它对办理JVM运用程序的问题很有用。
它具有各种功能,例如,识别Java进程ID,获取堆转储,获取线程转储,获取垃圾网络统计信息等。

[administrator@JavaLangOutOfMemory luga ]%jcmd <pid> Thread.print > <file-path>pid:是运用程序的进程ID,应捕获其线程转储file-path:是将写入线程转储的文件路径。

详细地:

[administrator@JavaLangOutOfMemory luga ]%jcmd 37300 Thread.print > /data/logs/threadDump.txt

- EOF -

如果您喜好本文,欢迎点赞、收藏、留言,或者点击右下角,把文章分享给你的朋友们~~~

Luga Lee

“路,在自己脚下~”

标签:

相关文章

大数据诠释,介绍现代社会的智慧脉搏

在科技飞速发展的今天,大数据已经成为了现代社会不可或缺的一部分。它如同一股强大的力量,推动着各行各业的发展。究竟什么是大数据?它又...

网站推广 2024-12-16 阅读0 评论0

大数据赋能,PK产业变革之路

随着互联网技术的飞速发展,大数据已成为推动产业变革的重要力量。在我国,大数据产业呈现出蓬勃发展的态势,尤其在PK产业中,大数据的应...

网站推广 2024-12-16 阅读0 评论0