目录
基础处理工具
jps
jstat-虚拟机信息监视工具
简介
jstat( JVM Statistics Monitoring Tool) 是用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程虚拟机进程中的类加载、 内存、 垃圾收集、 即时编译等运行时数据, 在没有GUI图形界面、 只提供了纯文本控制台环境的服务器上, 它将是运行期定位虚拟机性能问题的常用工具
使用jstat [option vmid [interval[s|ms] [count]]]
示例:jstat -gc 2764 250 20
jinfo-java配置信息工具
简介
jinfo( Configuration Info for Java) 的作用是实时查看和调整虚拟机各项参数。 使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表, 但如果想知道未被显式指定的参数的系统默认值, 除了去找资料外, 就只能使用jinfo的-flag选项进行查询了( 如果只限于JDK 6或以上版本的话, 使用javaXX: +PrintFlagsFinal查看参数默认值也是一个很好的选择) 。 jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来。 这个命令在JDK 5时期已经随着Linux版的JDK发布, 当时只提供了信息查询的功能, JDK 6之后, jinfo在Windows和Linux平台都有提供, 并且加入了在运行期修改部分参数值的能力( 可以使用-flag[+|-]name或者-flag name=value在运行期修改一部分运行期可写的虚拟机参数值) 。 在JDK 6中, jinfo对于Windows平台功能仍然有较大限制, 只提供了最基本的-flag选项。
jmap-java内存映像工具
jmap( Memory Map for Java) 命令用于生成堆转储快照( 一般称为heapdump或dump文件) 。 如果不使用jmap命令, 要想获取Java堆转储快照也还有一些比较“暴力”的手段: 譬如在第2章中用过的-XX: +HeapDumpOnOutOfMemoryError参数, 可以让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件, 通过-XX: +HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]键让虚拟机生成堆转储快照文件, 又或者在Linux系统下通过Kill-3命令发送进程退出信号“恐吓”一下虚拟机, 也能顺利拿到堆转储快照
jhat-jvm堆转存储快照分析工具
JDK提供jhat( JVM Heap Analysis Tool) 命令与jmap搭配使用, 来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/Web服务器, 生成堆转储快照的分析结果后, 可以在浏览器中查看。 不过实事求是地说, 在实际工作中, 除非手上真的没有别的工具可用, 否则多数人是不会直接使用jhat命令来分析堆转储快照文件的, 主要原因有两个方面。 一是一般不会在部署应用程序的服务器上直接分析堆转储快照, 即使可以这样做, 也会尽量将堆转储快照文件复制到其他机器上进行分析, 因为分析工作是一个耗时而且极为耗费硬件资源的过程, 既然都要在其他机器上进行, 就没有必要再受命令行工具的限制了。 另外一个原因是jhat的分析功能相对来说比较简陋, VisualVM, 以及专业用于分析堆转储快照文件的Eclipse Memory Analyzer、 IBM HeapAnalyzer等工具, 都能实现比jhat更强大专业的分析功能。
jstack-java堆栈跟踪工具
jstack( Stack Trace for Java) 命令用于生成虚拟机当前时刻的线程快照( 一般称为threaddump或者javacore文件) 。 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合, 生成线程快照的目的通常是定位线程出现长时间停顿的原因, 如线程间死锁、 死循环、 请求外部资源导致的长时间挂起等, 都是导致线程长时间停顿的常见原因。 线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情, 或者等待着什么资源。