JVM 常见命令行监控工具
1. jps:查看正在运行的 java 进程
- 语法:jps [-q] [-mlvV] [<hostid>]
- -q:仅仅显示LVMID,既本地虚拟机i唯一id,不显示主类名称
- -l:输出应用程序主类的全类名,如果进程执行的是 jar 包,则输出jar 包完整路径
- -m:输出虚拟机进程启动时传递给主类 main() 的参数
- -v:列出虚拟机进程启动时的 JVM 参数。比如 -Xms20m -Xmx50m 是启动程序指定的 JVM 参数
- hostid:hostname:port,主机名:端口号,远程连接,需要安装 jstatd
2.jstat:查看 JVM 统计信息
- 语法:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- -<option>
- -class:查看所有加载的类型的数量,占用内存,卸载的类型数量,卸载的类型占用内存,花费的总体时间
- -compiler:查看 JIT 编译数量,失败数量,无效数量,编译总耗时,失败类型,失败方法
- -gc:显示与 GC 相关的堆信息,包括 Eden 区、两个 Survivor 区,老年代,方法区等的容量,已用空间,GC 时间合计等信息
- -gccapacity:除 -gc 显示的内容外,还包括各个区域使用到的最大、最小空间
- -gcutil:除 -gc 显示的内容外,还输出已使用空间占总空间的百分比
- -gccause:除 -gcutil 显示的内容外,额外输出导致最后一次或当前正在发生的 GC 产生的原因
- -t:程序运行的总时间
- interval:周期性每隔 interval 毫秒打印一次 jstat 信息,如:jstat -class 11111 1000,每隔1 秒打印一次 jstat 信息
- count:搭配 interval,代表只打印指定次数
- -<option>
3. jinfo:查看虚拟机配置参数信息,也可用于调整虚拟机参数配置
- 语法:jinfo [option] <pid>
- option:查看或修改 jvm 参数,系统属性信息,注意只能修改被标记为 manageable 的参数
- no option 输出全部参数和系统属性
- -flag name:输出对应名称的参
- -flag [+-]name:开启或关闭对应名称和参数
- -flag name=value:设置对应名称的参数
- -flags:输出全部参数
- -sysprops:输出系统属性
- option:查看或修改 jvm 参数,系统属性信息,注意只能修改被标记为 manageable 的参数
4. jmap:导出内存映像文件和内存使用情况
- 语法:jmap [option] <pid>
- option:
- -dump:生成 dump 文件
- -heap:输出整个堆空间详细信息,包括 GC 使用,堆配置信息,以及内存使用情况
- -histo:输出对重对象统计信息,包括类、实例数量和合计容量
- option:
5. jstack:输出 JVM 中线程快照
- 语法:jstack [option] <pid>
- option:
- -F:当正常输出的请求不被响应时,强制输出线程堆栈
- -m:如果调用到本地方法的话,可以显示 C/C++ 的堆栈
- -l:除堆栈外,显示关于锁的附加信息
- 在 thread dump 中,留意以下几种状态
- 死锁,Deadlock(重点关注)
- 等待资源,waiting on condition (重点关注)
- 等待获取监视器,waiting on monitor entry (重点关注)
- 阻塞,Blocked (重点关注)
- 执行中, Runnable
- 暂停,Suspended
- 对象等待中,Object.wait() 或 TIMED_WAITING
- 停止,Parked