jps
列出所有正在运行的JVM
功能
jps命令列出目标系统上已检测的Java HotSpot VM, 该命令仅限于报告具有访问权限的JVM的信息
如果在未指定hostid的情况下运行jps命令, 则它将在本地主机上搜索已检测的JVM; 如果以hostid启动,则它使用指定的协议和端口在指定的主机上搜索JVM
jps命令报告在目标系统上找到的每个已检测JVM的本地JVM标识符或lvmid. lvmid通常(但不一定)是JVM进程的操作系统进程标识符. 如果没有选项, jps会列出每个Java应用程序的lvmid, 后跟应用程序的类名或jar文件名的简短形式. 类名或JAR文件名的缩写形式省略了类的包信息或JAR文件路径信息
jps命令使用Java启动程序查找传递给main方法的类名和参数. 如果使用自定义启动程序启动目标JVM, 则类或JAR文件名和main方法的参数不可用. 在这种情况下, jps命令输出类名称或JAR文件名的字符串Unknown以及main方法的参数
jps命令生成的JVM列表可以由授予运行该命令的主体的权限限制. 该命令仅列出原则具有访问权限的JVM, 具体取决于操作系统特定的访问控制机制
options
-q
只显示pid
-m
显示传递给 main() 的参数
-l
显示应用程序主类的完整包名或应用程序的JAR文件的完整路径名
-v
显示传递给JVM的参数
jinfo
查看/修改JVM参数信息
功能
jinfo命令打印指定Java进程或核心文件或远程调试服务器的Java配置信息, 包括Java系统属性和JVM命令行标志
如果指定的进程在64位JVM上运行, 可能需要指定-J-d64选项: jinfo-J-d64 -sysprops pid
该指令JDK以后可能不再支持
options
no-option
显示命令行和系统属性键值对
-flag name
显示指定命令行键值对
-flag [+|-]name
启用或禁用指定命令行属性
-flag name=value
设置指定命令行属性值
-flags
显示传递给JVM的命令行属性
-sysprops
显示系统属性键值对
jstat
监控JVM运行状态
功能
显示JVM性能统计信息, 目标JVM由vmid指定
options
-options
查看可用选项
-class
类装载器统计
-compiler
jit编译器统计
-gc
垃圾收集堆信息
-gccapacity
内存池生成和空间容量
-gccause
-gcutil
的内容+最后一次gc的原因
-gcnew
新生代统计
-gcnewcapacity
新生代空间大小统计
-gcold
年老代和元空间行为统计
-gcoldcapacity
年老代空间大小统计
-gcmetacapacity
元空间大小统计
-gcutil
垃圾回收统计概要
-printcompilation
JVM编译器方法统计
jmap
打印JVM堆内存信息
功能
打印JVM堆内存信息, 如果指定的进程在64位JVM上运行, 可能需要指定-J-d64选项: jmap-J-d64 -heap pid
该指令JDK以后可能不再支持
options
no option
显示共享对象映射
-dump: format=b, file=filename
将Java堆另存为hprof二进制格式, 可以使用jhat命令读取生成的文件
-heap
打印使用的垃圾收集, 头部配置和生成方式堆使用的堆摘要
-histo
打印堆的直方图, 对于每个Java类, 将打印对象数, 内存大小(以字节为单位)和完全限定的类名
-clstats
打印class loader统计信息
jstack
打印java线程堆栈
功能
jstack命令打印指定Java进程, 核心文件或远程调试服务器的Java线程的Java堆栈跟踪
对于每个Java帧, 将打印完整的类名, 方法名, 字节代码索引(BCI)和行号(如果可用)
如果指定的进程在64位JVM上运行, 可能需要指定-J-d64选项: jstack -J-d64 -m pid
options
-l
长列表, 打印锁的额外信息
-m
打印java和native c/c++框架的所有栈信息
排查实战
频繁GC问题或内存溢出问题
- 使用
jps
查看线程ID - 使用
jstat -gc 25252 250 20
查看gc情况, 一般比较关注PERM区的情况, 查看GC的增长情况 - 使用
jstat -gccause
输出上次GC原因 - 使用
jmap -dump:format=b,file=heapDump 25252
生成堆转储文件 - 使用jhat或者可视化工具(Eclipse Memory Analyzer, IBM HeapAnalyzer)分析堆情况
- 结合代码解决内存溢出或泄露问题
死锁
- 使用
jps
查看线程ID - 使用
jstack 3331
查看线程情况