Java监控和故障处理工具

JDK 命令行工具

这些命令在 JDK 安装目录下的 bin 目录下:

  • jps JVM Process Status

    • 类似Linuxps命令。
    • 查看所有Java进程的启动类、传入参数和Java虚拟机参数等信息
    • 常用参数:
      • -l:输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径。
      • -m:输出传递给 Java 进程 main() 函数的参数。
      • -v:输出虚拟机进程启动时 JVM 参数。
  • jstat JVM Statistics Monitoring Tool

    • 用于收集虚拟机各方面的运行数据
    • 在Linux服务器上,它是运行期间定位虚拟机性能问题的首选工具。
    • 命令格式:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
      • jstat -class vmid :显示 ClassLoader 的相关信息;
      • jstat -compiler vmid :显示 JIT 编译的相关信息;
      • jstat -gc vmid :显示与 GC 相关的堆信息;
      • jstat -gccapacity vmid :显示各个代的容量及使用情况;
      • jstat -gcnew vmid :显示新生代信息;
      • jstat -gcnewcapcacity vmid :显示新生代大小与使用情况;
      • jstat -gcold vmid :显示老年代和永久代的信息;
      • jstat -gcoldcapacity vmid :显示老年代的大小;
      • jstat -gcpermcapacity vmid :显示永久代大小;
      • jstat -gcutil vmid :显示垃圾收集信息;
      • 加上-t参数可以在输出信息上加一个 Timestamp 列,显示程序的运行时间。
  • jinfo Configuration Info for Java

    • 显示虚拟机配置信息
    • 可以在不重启虚拟机的情况下,动态修改Java程序的JVM参数
    • jinfo -flag [+|-]name vmid:开启或者关闭对应名称的参数。
      • jinfo -flag MaxHeapSize 17340
  • jmap Memory Map for Java

    • 生成堆转储快照,之后通过jhatVisual VM等工具分析该堆文件。

      如果不使用jmap命令,要想获取堆转储,可以使用-XX:+HeapDumpOnOutOfMemoryError参数,让虚拟机在OOM异常出现之后自动生成dump文件,Linux命令下可以通过kill -3发送进程退出信号也能拿到dump文件。

    • 可以查询 finalizer 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前使用的是哪种收集器等。

  • jhat JVM Heap Dump Browser

    • 用于分析 heapdump 文件
    • 它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果;
  • jstack Stack Trace for Java

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

JDK可视化工具

todo


内容来源

JDK 监控和故障处理工具总结