虚拟机性能监控与故障处理工具

2018/08/05 JVM

虚拟机性能监控与故障处理工具

数据:运行日志,异常堆栈,GC 日志,线程快照,堆转储快照等。

jps:虚拟机进程状况工具

功能: 可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类(Main Class, main() 函数所在的类)名称以及这些进程的本地虚拟机唯一 ID。

JPS 工具主要选项:

-q: 只输出 LVMID,省略主类的名称。
-m: 输出虚拟机启动时传递给主类 main() 函数的参数。
-l: 输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径。
-v: 输出虚拟机进程启动时 JVM 参数。

jstat: 虚拟机统计信息监视工具

jstat 是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载,内存,垃圾收集,JIT 编译等运行数据。

jstat 工具主要选项:

  • -class: 监视类装载,拆卸数量,总空间以及类装载所耗费的时间
  • -gc: 监视 Java 堆状况,包括 Eden 区,两个 survivor 区,老年代,永久代等的容量,已用空间,GC 时间合计等信息。
  • -gccapacity: 监视内容与 -gc 基本相同,但输出主要关注 Java 堆各个区域使用到的最大,最小空间。
  • -gcutil: 监视内容与 -gc 基本相同,但输出主要关注已使用空间占总空间的百分比。
  • -gccause: 与 -gcutil 功能一样,但是会额外输出导致上一次 GC 产生的原因。
  • -gcnew: 监视新生代 GC 状况。
  • -gcnewcapacity: 监视内容与 -gcnew 基本相同,输出主要关注使用到的最大,最小空间。
  • -gcold: 监视老年代 GC 状况。
  • -gcoldcapacity: 监视内容与 -gcold 基本相同,输出主要关注使用到的最大,最小空间。
  • -gcpermcapacity: 输出永久代使用到的最大,最小空间。
  • -compiler: 输出 JIT 编译器编译过的方法,耗时等信息。
  • -printcompilation: 输出已经被 JIT 编译的方法。

jinfo: Java 配置信息工具

实时的查看和调整虚拟机的各项参数。 如果,想知道未被显示指定的参数系统默认值,可以通过如下指令:

jinfo -flag

jmap: Java 内存映像工具

jmap 的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalize 执行队列,Java 堆和永久代的详细信息,如空间使用率,当前用的是哪种收集器等。 jmap 工具的主要选项:

  • -dump: 生成 Java 堆转存储快照。
  • -finalizerinfo: 显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。只在 Linux/Solaris 平台下有效。
  • -heap: 显示 Java 堆详细信息。如使用哪种回收器,参数配置,分代状况等。只在 Linux/Solaris 平台下有效。
  • -histo: 显示堆中对象统计信息,包括类,实例数量,合计容量。
  • -permstat: 以 ClassLoader 为统计口径显示永久代内存状态。只在 Linux/Solaris 平台下有效。
  • -F: 当虚拟机进程对 -dump 选项没有响应时,可使用这个强制生成 dump 快照。只在 Linux/Solaris 平台下有效。

jstack: Java 堆栈跟踪工具

jstack 命令用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore 文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,生成线程快照的目的是定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过 jstack 来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待什么资源。

jstack 工具主要选项:

* -F:当正常输出的请求不被响应时,强制输出线程堆栈。
* -l:出堆栈外,显示关于锁的附加信息。
* -m:如果调用到本地方法的话,可以显示 C/C++ 的堆栈。

Search

    Table of Contents