热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Java中抓取ThreadDumps的方式汇总

Threaddumps(线程转储)能帮助我们判断CPU峰值、死锁、内存异常、应用反应迟钝、响应时间变长和其他系统问题。在这篇文章当中,总结了7中抓取JavaThreadDumps文件的方式,分享给大家,希望对大家学习Java能够有所帮助。

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

1. jstack

jstack 是一个抓取 thread dump 文件的有效的命令行工具,它位于 JDK 目录里的 bin 文件夹下(JDK_HOME\bin),以下是抓取 dump 文件的命令:

jstack -l  > 

说明:

pid: Java 应用的进程 id ,也就是需要抓取 dump 文件的应用进程 id。

file-path: 保存 dump 文件的路径。

示例:

jstack -l 37320 > /opt/tmp/threadDump.txt

上面的例子演示了用 jstack 生成 dump 文件到 /opt/tmp/threadDump.txt 目录下。

从 Java5 开始,jstack 被包含进了 jdk 当中,如果你使用老版本的 jdk,要考虑使用其他方式。

2. Kill -3

处于安全方面的考虑,有一部分生产环境的机器只包含 JRE 环境,因此就不能使用 jstack 工具了,在这种情况下,我们可以使用 kill -3 的方式:

kill -3

说明:

pid: Java 应用的进程 id ,也就是需要抓取 dump 文件的应用进程 id 。
示例:

kill -3 37320
当使用 kill -3 生成 dump 文件时,dump 文件会被输出到标准错误流。假如你的应用运行在 tomcat 上,dump 内容将被发送到/logs/catalina.out 文件里。

3. JVisualVM

Java VisualVM 是一个可以提供 JVM 信息的图形界面工具。它位于 JDK_HOME\bin\jvisualvm.exe 文件里。从 JDK6 Update7 开始,它被包含进 JDK 里。

运行 jvisualvm,在左侧面板中(如下图所示),列出了运行的 JVM 信息,这个工具可以从本地或者远程运行的 JVM 里抓取 dump 文件。

点击上图的进程名称对应的 Thread Dump 按钮,将会生成 dump 文件,如下图所示:

4. JMC

Java Mission Control (JMC) 是一个能从本地或生产环境中收集和分析数据的工具,从 Oracle JDK 7 Update 40 开始,它被包含进 JDK 里,它可以从 JVM 里生成 dump 文件。JMC 位于 JDK_HOME\bin\jmc.exe 文件里:

运行该工具之后,你可以看到运行在本地的 Java 进程,它也可以连接到远程机器。双击你想要生成 dump 文件的 Java 进程,点击Flight Recorder,你会看到以下的对话框:

在 Thread Dump 下拉框,你可以选择生成 dump 文件的时间间隔。在上面的例子里,每隔60秒将会生成一个 dump 文件。选择完成之后启动 Flight recorder ,可以在 Threads 面板看到 dump 文件的内容:

5. Windows (Ctrl + Break)

这种方式仅仅在 Windows 操作系统上有效:

在控制台窗口上选中命令行

在命令行窗口上按 “Ctrl + Break” 命令

然后会生成 dump 文件,dump 文件的内容会被打印在命令行窗口上。

注意1: 有几款笔记本(比如 Lenovo T 系列)已经取消了 “Break” 键,在这种情况下你不得不用谷歌搜索与 Break 键功能类似的键,我发现 “Function key + B” 键与 Break 键的功能相同,因此我用 “Ctrl + Fn + B” 键来生成 dump 文件。

注意2: 用上述方式有一个缺点就是 dump 文件的内容会被打印到控制台上,没有 dump 文件的话,我们很难用分析工具比如http://fasthread.io来分析 dump 文件。因此你可以使用以下命令将 dump 文件的内容输出到文本文件当中,比如你的应用程序名字叫 SampleThreadProgram ,那么通常使用的命令如下:

java -classpath . SampleThreadProgram

将 dump 文件的内容输出到文本文件的命令如下:

java -classpath . SampleThreadProgram > C:\workspace\threadDump.txt 2>&1
当你按下 “Ctrl + Break” 键之后,dump 文件会被保存到 C:\workspace\threadDump.txt 里。

6. ThreadMXBean

从 JDK 1.5 开始,ThreadMXBean 被引入。这是 JVM 的管理接口,使用这个接口你仅需要少量的代码就能生成 dump 文件,以下是使用 ThreadMXBean 生成 dump 文件的主要实现:

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

7. APM Tool – App Dynamics

一些应用性能监控工具提供了生成 dump 文件的功能,如果你使用 App Dynamics 监控你的应用,以下就是生成 dump 文件的步骤:

打开创建动作窗口,在创建动作窗口中选择 Diagnostics->Take a thread dump;

输入动作名称、抓取 dump 文件的数量、抓取 dump 文件的时间间隔(毫秒);

如果你想在抓取 dump 动作开始之前执行一些操作,那么你可以选中 Require approval executing before this Action 这个复选框,然后输入个人或小组的 email 地址;

点击 OK.


总结

尽管我在前面列出了7种抓取 dump 文件的方式,但恕我直言,jstack 和 kill -3 是最好的选择,原因如下:

a. 简单,容易实现;

b. 通用:在大多数情况下,不管操作系统类型、Java 厂商、JVM 版本等等。


推荐阅读
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • C盘无法格式化的原因及解决方法
    本文探讨了C盘无法格式化的原因,并提供了详细的解决方案,帮助用户顺利进行系统维护。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 本文介绍了如何解决Win10高分辨率屏幕下字体缩放模糊的问题,包括系统设置、软件自定义DPI、系统字体调整以及使用.manifest文件等方法。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
author-avatar
一巴掌呼死你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有