Java监控和故障处理工具
JDK 命令行工具
这些命令在 JDK 安装目录下的 bin 目录下:
-
jps
JVM Process Status- 类似
Linux
的ps
命令。 - 查看所有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-
生成堆转储快照,之后通过
jhat
、Visual 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
内容来源