以下命令都有 -options 来帮助查看有哪些参数设置
jps 命令
查看HotSpot当前运行有哪些虚拟进程号
jstat (JVM Statistis Montiroring Tool) 命令
监视虚拟机各种运行状态信息的命令工具, 可以显示本地和远程的类装载,内存,垃圾收集,JIT编译等运行时数据
类相关信息监控
通过jps查询到进程端口之后, 使用jstat
命令执行
-
-class
表示输出类相关的信息(类装载卸载时间) -
-t
表示程序启动耗费了多少时间ms -
-h3
表示每隔3s次打印一次表头 -
12584
表示进程号 -
1000
表示定时器时间,1s执行一次输出信息 -
5
表示定时器输出了5次就终止
GC回收相关监控
-
-gc
表示查看当前监控进程的内存使用 -
14400
表示进程端口号 -
1000
表示每隔1s执行输出一次监控信息 -
10
表示输出10次就停止监控
jinfo 命令
查看HotSpo
t配置参数,可以用于调整其配置参数,很多情况下java程序不会指定所有的java虚拟机参数, 此时程序员可能不知道具体的java虚拟机默认参数是多少 。这种情况下就可以借助jinfo
命令查看当前的信息
查询当前命令可以使用的参数
jinfo -sysprops 端口号
获取的数据都可以通过我们的System.getProperties()
获取到
查看配置了哪些HotSpot
的参数
jinfo 修改
java -XX:+PrintFlagFinal 命令
查看所有JVM参数的最终设置值
java -XX:+PrintFlagsInitial 命令
查看所有的JVM参数启动的初始值, 因为值比较多,可以输出到日志文件log保存
jmap 命令
导出(自动或手动)内存中映像文件(dump文件)以及查看gc,类装载,内存使用情况等
查看堆信息
jstack 命令
用于生成jvm虚拟机指定进程当前时刻的线程快照,线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合
生成线程快照作用:
可用于定位线程出现长时间停顿的原因, 如线程间死锁,死循环,请求外部资源导致的长时间等待问题。这些都是导致线程是长时间停顿的原因。当线程出现停顿时,就可以用jstack显示各个线程调用的堆栈情况
在 thread dump
文件中,比较关心的状态:
- 死锁(Deadlock)
- 等待资源(Waiting on condition)
- 等待获取监视器(Waiting on monitor entry)
- 阻塞(Blocked)
- 执行中(Runnable)
- 暂停(Suspended)
jcmd 命令
一个混和的多功能命令,可以替代jstat
,jinfo
,jmap