英文完整文档:http://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdf
诊断工具和选项
这章介绍了JDK 6 和 Java SE6 里不同的诊断和监视工具。这些工具在第二章详细介绍。
附录 D 列出了这个发布里的可用工具,还有上次发布以来的改变。
注意:本章描述的一些命令行工具是实验性的。例如 jstack, jinfo, jmap
就是实验性的。这些工具可能在将来的JDK发布里改变,或者不包括在将来的发布里。
1.1 前言
本章介绍的大多数命令行实用程序(utilities )要么包括在JDK发布里,要么是操作系统工具(tools)和实用程序 (utilities )。虽然JDK命令行实用程序(utilities )包括在JDK下载里,很重要的是要注意到它们可用于诊断议题(issues)和监视部署在Java 运行时环境(JRE)下的应用程序。
通常,本章描述的诊断工具和选项使用不同的机制来获取它们报告的信息。很多情况下,这些机制是特定于虚拟机实现、操作系统和它们的不同版本。因此,有些工具报告的信息是有重叠的。这会在这些工具准备(诊断)的不同难题(problems)和议题(issues)的上下文环境里看到。在很多情况下,只有一些工具的子集合可用于给定的议题issues,在特定的时间点。
1.1.1 带 -XX
的命令行选项
前缀了 -XX
的命令行选项是特定于 HotSpot VM 的。很多选项对性能调优和诊断目的是很重要的,因此将在本指南里描述。
然而,注意到这些 -XX
选项不是 Java API 的一部分并能在不同的发布里变化是很重要的。
1.1.2 限制
在某些情况下,这里描述的工具只能在某些操作系统上可用。另外,Solaris 10 OS 引入了很多高级的诊断特性和工具,可用于生产环境,很多本地工具有能力提供 JRE 特定的信息。
日志文件格式和命令行实用程序和选项的输出是版本特定的。例如,如果你开发了一个依赖于致命错误日志的格式的脚本,这个脚本可能不如预期那样工作,如果将来日志文件格式改变了。
1.1.3 开发新工具
除了这篇描述的工具,你可以用JDK提供的API开发新的工具。
1.2 工具、选项和命令 概要
工具和选项分为下面的分类,特定的工具可能进入多个分类。工具和选项在后面章节详细描述。
- 事后诊断。这些工具和选项用于在应用程序崩溃后诊断难题。
- 挂起的进程。这些工具用于调查挂起的或死锁进程。
- 监视。这些工具用于监视正在运行的应用程序。
- 其他。这些工具和选项用于辅助诊断其他议题issues。
- 操作系统工具。这些工具由特定的操作系统提供。
1.2.1 用于事后诊断的工具和选项
本节总结的选项和工具被设计用于事后诊断。如果应用程序崩溃了,这些选项和工具可用于获取额外的信息,在崩溃发生时或之后使用崩溃dump的信息。
工具或选项 | 描述和用法 |
致命错误日志 | 当致命错误发生时,一个错误日志将被创建。这个文件包含很多致命错误发生时获取到的信息。很多情况下,当崩溃发生时是第一次检验。 |
-XX:+HeapDumpOnOutOfMemoryError 选项 | 这个命令行选项指定了当VM检测到本地OOM错误时生成一个堆dump。 |
-XX:OnError选项 | 这个命令行选项指定了当致命错误发生时执行的用户提供的一序列脚本或命令。例如,在windows上,这个选项可以执行一个命令来强制崩溃dump。当系统没有指定事后调试器时这个选项很有用。 |
-XX:+ShowMessageBoxOnError | 这个命令行选项在致命错误发生时暂停进程。依赖于用户响应,这个选项可以拉起一个本地调试器来关联到VM。 |
其他 -XX 选项 | 有些其他 `-XX` 项目例会选项对于问题解决很有用。 |
Java VisualVM | 这个实用程序可以分析core dump,提供core dump的可读展示,以堆dump和线程dump的形式,还有概要信息(例如,JVM参数、系统属性和其他)。 |
jdb 实用程序 | 调试器。 |
jhat 实用程序 | 这个实用程序提供了便捷的手段来浏览堆dump里的对象的拓扑。 |
jinfo 实用程序 | 这个实用程序从core文件获取配置信息。 |
jmap 实用程序 | 这个实用程序从core文件获取内存映射信息,包括对的直方图histogram。 |
jsadebugd daemon | Serviceability Agent Debug Daemon ( jsadebugd)使Java进程附加到一个core文件,然后作为调试服务器。 |
jstack 实用程序 | 这个实用程序可从Java进程获取Java和本地栈信息。在Solaris OS 和Linux上,实用程序可从core文件或远程调试服务器获取信息。 |
本地工具 | 每个操作系统有本地工具和实用程序用于事后诊断。 |
1.2.2 用于挂起进程的工具和选项
这个列表里的选项和工具对于涉及挂起进程或死锁进程的场景有帮助。这些工具不要求任何特定的选项来启动应用程序。
工具和选项 | 描述和使用 |
Ctrl-Break handler (Ctrl-\ or kill -QUIT pid on Solaris OS and Linux, Ctrl-Break on Windows) | 这个键组合执行线程dump和死锁检测。Ctrl-Break处理器可选地打印当前锁和它们的属主列表,还有堆的直方图histogram。 |
jdb 实用程序 | 调试器。 |
jhat 实用程序 | 这个实用程序提供了便捷的手段来浏览堆dump里的对象的拓扑。 |
jinfo 实用程序 | 这个实用程序从core文件获取配置信息。 |
jmap 实用程序 | 这个实用程序从core文件获取内存映射信息,包括对的直方图histogram。 |
jsadebugd daemon (Solaris OS and Linux only) | Serviceability Agent Debug Daemon ( jsadebugd)使Java进程附加到一个core文件,然后作为调试服务器。 |
jstack 实用程序 | 这个实用程序可从Java进程获取Java和本地栈信息。在Solaris OS 和Linux上,实用程序可从core文件或远程调试服务器获取信息。 |
本地工具 | 每个操作系统有本地工具和实用程序用于挂起进程和死锁的情况。 |
1.2.3 用于监视的工具和选项
这些工具设计用于监视正在运行的应用程序。
工具和选项 | 描述和使用 |
Java VisualVM | 这个实用程序提供了可见接口用于查看正运行在JVM上的Java应用程序的详细信息。这些信息可用于本地和远程应用程序的问题解决,和本地应用程序剖析。 |
JConsole 实用程序 | 这个实用程序是基于JMX的监视工具。工具利用了JVM内置的JMX instrumentation 来提供正在运行的应用程序的性能和资源消耗信息。 |
jmap 实用程序 | 这个实用程序从core文件获取内存映射信息,包括对的直方图histogram。 |
jps 实用程序 | 这个实用程序列出目标系统上的JVM。对于嵌入式VM的环境很有用。 |
jstack 实用程序 | 这个实用程序可从Java进程获取Java和本地栈信息。在Solaris OS 和Linux上,实用程序可从core文件或远程调试服务器获取信息。 |
jstat 实用程序 | 这个实用程序用HotSpot VM内置的 instrumentation来提供正在运行的应用程序的性能和资源消耗信息。这个工具可用于诊断性能议题issues和与堆大小调整和垃圾回收有关的特殊议题issues。 |
jstatd daemon | This tool is an RMI server application that monitors the creation and termination of instrumented Java virtual machines and provides an interface to allow remote monitoring tools to attach to VMs running on the local host. |
visualgc 实用程序 | This utility provides a graphical view of the garbage collection system. As with jstat, it uses the built-in instrumentation of the HotSpot VM. |
本地工具 | Each operating system has native tools and utilities that can be useful for monitoring purposes. For example, the dynamic tracing (DTrace) capability introduced in Solaris 10 OS performs advanced monitoring. |
1.2.4 其他工具、选项、变量和属性
工具和选项 | 描述和使用 |
HPROF 剖析器 | 这个简单的剖析器可展示CPU使用情况、堆分配统计、争用剖析、堆dump和JVM里所有监视器和线程的状态。HPROF在性能分析、锁竞争、内存泄露核其他议题issues上很有用。 |
jhat 实用程序 | 这个实用程序提供了便捷的手段来浏览堆dump里的对象的拓扑。 |
jinfo 实用程序 | 这个实用程序从core文件获取配置信息。 |
jrunscript 实用程序 | 这是个命令行脚本shell,支持交互式和批模式执行。 |
Sun Studio dbx debugger | This is an interactive, command-line debugging tool, which allows you to have complete control of the dynamic execution of a program, including stopping the program and inspecting its state. For details, see the latest dbx documentation, located at the Sun Studio Program Debugging site. |
Sun Studio Performance Analyzer | This tool can help you assess the performance of your code, identify potential performance problems, and locate the part of the code where the problems occur. The Performance Analyzer can be used from the command line or from a graphical user interface. For details, see the Sun Studio Performance Analyzer site. |
Sun’s Dataspace Profiling: DProfile |
This tool provides insight into the flow of data within Sun computing systems, helping you identify bottlenecks in both software and hardware. DProfile is supported in the Sun Studio 11 compiler suite through the Performance Analyzer GUI。 |
-Xcheck:jni 选项 | 这个选项在诊断使用了本地接口JNI或第三方库的应用程序里有用。 |
-verbose:class 选项 | 这个选项允许记录类的加载和卸载。 |
-verbose:gc 选项 | 这个选项允许记录垃圾回收日志。 |
-verbose:jni 选项 | 这个选项运行JNI日志。 |
JAVA_TOOL_OPTIONS 环境变量 | This environment variable allows you to specify the initialization of tools, specifically the launching of native or Java programming language agents using the -agentlib or -javaagent options. |
java.security.debug 系统属性 | 这个系统属性控制JRE在执行安全检查时是否输出跟踪信息。 |
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。