- JPS:虚拟机进程状况工具
- jstat:虚拟机统计信息监视工具
- jinfo:Java配置信息工具
- jmap:Java内存映像工具
- jhat:虚拟机堆转储快照分析工具
- jstack:Java栈跟踪工具
可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类名称及进程的本地虚拟机唯一ID(LVMID):
常用命令选项:
-q :只显示LVMID
-m :主类main函数的参数
-l :输出主类的全名,执行的是Jar包则输出JAR路径
-v :输出虚拟机启动时的JVM参数
看看jps -v吧:
可以看到常见的-Xms -Xmx等等
jstat:虚拟机统计信息监视工具用于监视虚拟机各种运行状态信息的命令行工具
命令格式为:
jstat + 选项 + vmid + 间隔时间(秒/毫秒)+ 次数
VMID说明:如果是本地虚拟机进程,VMID和LVMID是一样的;如果是远程的虚拟机进程,VMID的格式就如下:
http(https): //LVMID ip:端口/服务名 (也不知道翻译对了没 )
jstat命令的选项主要分为三类:类加载、垃圾收集器、运行期编译状况;以下是主要选项:
| 选 项 | 作用 |
|---|---|
| -class | 监视类加载、卸载数量、总空间以及类装载所耗费的时间 |
| -gc | 监视堆状况,包括Eden、2个Survivor、老年代、永久区代的容量、已用空间、垃圾收集时间合计等信息 |
| -gccapacity | 与-gc监视内容基本相同,但是主要关注Java各个堆区域使用到的最大、最小空间 |
| -gcutil | 与-gc监视内容基本相同,但是主要关注已使用空间占总空间的百分比 |
| -gccause | 与-gcutil功能一样,但是会额外输出导致上一次垃圾收集的原因 |
| -gcnew | 监视新生代垃圾收集状况 |
| -gcnewcapactiy | 见名知意,主要关注新生代使用到的最大空间、最小空间 |
| -gcold | 监视老年代垃圾收集状况 |
| -gcoldcapactiy | 同理 |
| -gcpermcapactiy | 主要关注永久代使用到的最大空间、最小空间 |
| -compiler | 输出即时编译器编译过的方法、耗时信息等 |
| -printcompilaction | 输出已经被即时编译器编译的方法 |
酪 下面演示一个 jstat -gcutil:
⚖ 解释一下输出的东西:
S0、S1代表的是两个Survivor区(幸存区)已使用空间,
E 代表的是Eden,新生代的Eden区已使用空间,
O 很明显,Old ------老年代已使用空间
M metaspace------元空间,因为我是jdk8,永久代已经被彻底替换为元空间;如果你的JDK版本 是7的某些版本或者低于7,就会看到的是 P Permanent-------永久代
CCS : 压缩类空间区域已使用的空间
YGC :Young GC 即发生了6次新生代的gc
YGCT : Young GC Time 即新生代gc的总耗时为0.062(秒)
FGC: Full GC (整堆收集)
FGCT:Full GC 的总耗时
GTC :所有GC的总耗时
jinfo:Java配置信息工具实时查看和调整虚拟机各项参数
命令格式:
jinfo + 选项 + LVMID
它的常用选项如图中的option处:
每个option参数上面都说的很清楚了,如不理解,我帮你翻译几个:
-flag :打印出这个name的虚拟机参数
示例如下:查看3788虚拟机进程是否开启了打印gc日志
可以看到是开启了的(补充基础:虚拟机参数前+代表开启,-代表关闭)
-flag [+|-]:就是动态地修改(开启/关闭)某个虚拟机进程的参数
示例如下:上面我们查到PrintGC参数式开启的,现在我们把它关了
再将它开启:
也成功的将其修改为开启
jmap:Java内存映像工具-flags :列出某个虚拟机进程的全部参数
用于生成堆转储快照(一把叫它dump文件、heapdump文件),
也可以使用 -XX:+HeapDumpOnOutOfMemoryError,可以让虚拟机在内存溢出异常后,自动生成堆转储快照文件
命令格式:
jmap +选项 + LVMID
表格实在不想写了,偷个懒 jmap --help如下
Usage:
jmap [option]
(to connect to running process)
jmap [option]
(to connect to a core file)
jmap [option] [server_id@]
(to connect to remote debug server)
where
jhat:虚拟机堆转储快照分析工具
与jmap配合使用,用来分析jmap生成的dump文件
jhat内置了一个微型的Http/Web服务器,生成堆转储快照分析结果后,可以在浏览器中查看,默认端口7000。几乎不会使用,有很多专门的分析工具
jstack:Java栈跟踪工具用于生成虚拟机当前时刻的线程快照
命令格式:
jstack + 选项 + LVMID
Usage:
jstack [-l]
(to connect to running process)
jstack -F [-m] [-l]
(to connect to a hung process)
jstack [-m] [-l]
(to connect to a core file)
jstack [-m] [-l] [server_id@]
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack does not respond (process is hung) (当正常输出的请求不被响应时,强制输出线程栈)
-m to print both java and native frames (mixed mode) (显示虚拟机栈和本地方法栈)
-l long listing. Prints additional information about locks (除了堆栈,还显示锁的信 息)
-h or -help to print this help message
兄弟们,写这玩意挺累的。可能不是很全面、详细(我相当于是做笔记《深入理解Java虚拟机》这本书很精彩),但也够入门了。如果其中有错误还请指正,欢迎交流学习。



