网站后台地址忘了,网页制作与设计表白设计,石家庄做网站,济南市高新技术官方网站开发区线程转储是诊断CPU尖峰#xff0c;死锁#xff0c;内存问题#xff0c;无响应的应用程序#xff0c;较差的响应时间以及其他系统问题的重要工件。有很多很棒的在线线程转储分析工具#xff0c;可以分析和发现问题。但是对于那些工具#xff0c;您需要提供适当的线程转储作…线程转储是诊断CPU尖峰死锁内存问题无响应的应用程序较差的响应时间以及其他系统问题的重要工件。有很多很棒的在线线程转储分析工具可以分析和发现问题。但是对于那些工具您需要提供适当的线程转储作为输入。因此在本文中我记录了7种不同的选项来捕获线程转储。1. jstack“ jstack”是捕获线程转储的有效命令行工具。jstack工具位于JDK_HOME bin文件夹中。这是捕获线程转储所需发出的命令jstack -l pid file-path哪里pid是应用程序的进程ID应捕获其线程转储file-path是将写入线程转储的文件路径。例jstack -l 37320 /opt/tmp/threadDump.txt按照示例该过程的线程转储将在/opt/tmp/threadDump.txt文件中生成。自Java 5以来JDK中已包含Jstack工具。如果您在旧版Java中运行请考虑使用其他选项2.kill-3在大型企业中出于安全原因只有JRE安装在生产机器中。由于jstack和其他工具只是JDK的一部分因此您将无法使用jstack。在这种情况下可以使用“ kill -3”选项。kill -3 pid哪里pid是应用程序的进程ID应捕获其线程转储例Kill -3 37320使用kill -3选项时线程转储将发送到标准错误流。如果要在tomcat中运行应用程序则线程转储将发送到TOMCAT_HOME /logs/catalina.out文件中。注意据我所知大多数* nix操作系统UnixLinuxHP-UX操作系统都支持此选项。不确定其他操作系统。3. JVisualVMJava VisualVM是一种图形用户界面工具可在应用程序在指定的Java虚拟机JVM上运行时提供有关这些应用程序的详细信息。它位于JDK_HOME bin jvisualvm.exe中。自JDK 6更新7.s起它是Sun JDK发行版的一部分。启动jvisualvm。在左侧面板上您会注意到计算机上正在运行的所有Java应用程序。您需要从列表中选择您的应用程序。该工具还具有从远程主机上运行的Java进程中捕获线程转储的功能。4.Java Mission ControlJava Mission ControlJMC是一种工具可从本地运行或部署在生产环境中的Java应用程序收集和分析数据。自Oracle JDK 7 Update 40起该工具已打包到JDK中。该工具还提供了从JVM进行线程转储的选项。JDK_HOME bin jmc.exe中存在JMC工具启动该工具后您将看到本地主机上正在运行的所有Java进程。注意JMC还具有与远程主机上运行的Java进程连接的能力。现在在左侧面板上单击要进行线程转储的Java进程下方列出的“ Flight Recorder”选项。5. Windows按Ctrl Break此选项仅在Windows操作系统中有效。· 选择已启动应用程序的命令行控制台窗口。· 现在在控制台窗口上发出“ Ctrl Break ”命令。这将生成线程转储。线程转储将被打印在控制台窗口本身上。注1在几台笔记本电脑例如我的Lenovo T系列中“ Break”键被拔下。在这种情况下您必须在Google上找到“ Break”的等效键。在我的情况下事实证明“功能键 B”等效于“断裂”键。因此我不得不使用“ Ctrl Fn B”来生成线程转储。注意2但是这种方法的一个缺点是线程转储将打印在Windows控制台本身上。如果不以文件格式获取线程转储则很难使用线程转储分析工具例如http://fasthread.io。因此当您从命令行启动应用程序时将输出重定向到文本文件即示例如果您正在启动应用程序“ SampleThreadProgram”则将发出以下命令java -classpath . SampleThreadProgram而是像这样启动SampleThreadProgramjava -classpath . SampleThreadProgram C:workspacethreadDump.txt 21因此当您发布“ Ctrl Break”时线程转储将发送到C workspace threadDump.txt文件。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 DynamicsAPM工具监视应用程序则以下是捕获线程转储的说明1.创建一个动作在“创建动作”窗口中选择“ 诊断”-“执行线程转储 ”。2.输入操作名称要采样的数量以及线程转储之间的间隔以毫秒为单位。3.如果要在启动线程转储操作之前需要批准请选中“在此操作之前需要批准”复选框然后输入被授权批准该操作的个人或组的电子邮件地址。有关更多信息请参见需要批准的操作。4.单击确定。8. JCMDjcmd工具是随Oracle Java 7引入的。它对解决JVM应用程序的问题很有用。它具有多种功能例如识别Java进程ID获取堆转储获取线程转储获取垃圾收集统计信息等等。使用以下JCMD命令可以生成线程转储jcmd pid Thread.print file-path哪里pid 是应用程序的进程ID应捕获其线程转储file-path 是将写入线程转储的文件路径。例jcmd 37320 Thread.print /opt/tmp/threadDump.txt按照示例该过程的线程转储将在/opt/tmp/threadDump.txt文件中生成。结论即使列出了7个不同的选项来捕获线程转储恕我直言最好还是使用1.jstack和2.kill -3。因为他们是一种。简单直接易于实现b。通用在大多数情况下均可运行与操作系统Java供应商JVM版本等无关