jps
查看所有进程
- 类似于 linux 的
ps
,查看所有 Java 进程的启动类、传入参数、Java 虚拟机参数等信息 jps
显示虚拟机执行的主类名和其的唯一 IDjps -q
只输出 IDjps -l
输出主类的全名,如果进程执行的是 jar 包就输出 jar 包的路径jps -v
输出虚拟机进程启动时的 JVM 参数jps -m
输出传递给 Java 进程 main() 函数的参数
jstat
监视虚拟机各种运行状态信息
- 用于监视虚拟机各种运行状态信息,可以显示本地或远程(支持 RMI)虚拟机进程中的类信息、内存、垃圾收集、JIT 编译等运行数据
jstat -class vmid
显示 ClassLoader 相关信息jstat -compiler vmid
显示 JIT 编译的相关信息jstat -gc vmid
显示 GC 相关的堆信息jstat -gccapacity vmid
显示各个代的容量以及使用情况jstat -gcnew vmid
显示新生代信息jstat -gcold vmid
显示老年代信息jstat -gcnewcapacity vmid
显示新生代大小以及使用情况jstat -gcoldcapacity vmid
显示老年代大小以及使用情况jstat -gcutil vmid
显示垃圾收集信息- 可以加上其他参数实现不同效果:
jstat -gc -h3 11594 1000 10
标识分析 id 为 11594 的进程的 gc 情况,每 1000ms 打印一次记录,打印 10 次停止,每 3 行后再打印一次标题
jinfo
- 实时的查看和调整虚拟机的参数
jinfo vmid
查看该进程的全部参数和系统参数jinfo -flag name vmid
输出对应的参数的具体值jinfo -flag [+|-]name vmid
开启或关闭对应的参数
jmap
- 生成堆快照,获取 dump 文件
- 获取 dump 文件的方法有很多,比如设置参数
-XX:+HeapDumpOnOutOfMemoryError
,或者在 linux 下的kill -3 pid
- 还有其它的功能,比如查询
finalizer
队列,Java 堆和永久代的详细信息,比如空间使用率、当前使用的是那种垃圾收集器等 - 生成的文件需要借助
jhat
,jvisualvm
等工具来分析
jhat
- 分析 dump 文件,会建立一个 HTTP 服务器,可以在浏览器上查看分析结果
- 地址是
http://localhost:7000
jstack
- 生成虚拟机当前的线程快照,就是当前虚拟机内的每一条线程正在执行的方法堆栈的集合
- 主要用来定位线程的长时间停顿、死循环、请求等待时间长等问题
jconsole
- 可视化工具
- 可以看当前内存的详细信息,加上参数可以查看远端的 Java 程序,也可以直接在程序里手动连接远端
-Djava.rmi.server.hostname=外网访问 ip 地址
-Dcom.sun.management.jmxremote.port=60001 //监控的端口号
-Dcom.sun.management.jmxremote.authenticate=false //关闭认证
-Dcom.sun.management.jmxremote.ssl=false
- 还可以做线程监控,有检测死锁等功能
jvisualvm
- 功能更强大的可视化工具
- 具备几乎其他工具的所有功能
- 还可以装插件实现更多功能