距离上一次更新该文章已经过了 656 天,文章所描述的內容可能已经发生变化,请留意。
plaintext
1 | jinfo: 可以输出并修改运行时的java 进程的opts。 |
命令后接
>>
输出某一位置,如: jstat -gc 13976 >> d:\c.txt
jps
- jpsplaintext
1
仅显示简单类名和pid
- jps -lplaintext
1
输出主类或者jar的完全路径名
- jps -vplaintext
1
输出jvm参数
- jps –qplaintext
1
仅仅显示Java进程号
jstat
- jstat -class PIDplaintext
1
显示加载class的数量,及所占空间等信息
- jstat -compiler PIDplaintext
1
显示VM实时编译的数量等信息
- jstat -gc PIDplaintext
1
可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间
- jstat -gccapacity PIDplaintext
1
可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量
- jstat -gcnew PIDplaintext
1
new对象的信息
- jstat -gcnewcapacity PIDplaintext
1
new对象的信息及其占用量
- jstat -gcold PIDplaintext
1
old对象的信息
- jstat -gcoldcapacity PIDplaintext
1
old对象的信息及其占用量
- jstat -gcpermcapacity PIDplaintext
1
perm对象的信息及其占用量
- jstat -util PIDplaintext
1
统计gc信息统计
- jstat -printcompilation PIDplaintext
1
当前VM执行的信息
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题
jmap
jmap -F -dump:live,format=b,file={xxx.hprof} PID
plaintext
1 | live参数是可选的,如果指定,则只转储堆中的活动对象;表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看的就是这些内存;如果没有指定,则转储堆中的所有对象。 |
- jmap -histo:live PIDplaintext
1
生成java堆中对象的相关信息,包含数量以及占用的空间大小
- jmap -heap PIDplaintext
1
查看堆的使用状况信息
jinfo
- 可以在运行时动态调整JVM参数(无需重启)
- 查看正在运行的Java应用程序的扩展参数
jinfo -flag <参数> PID
plaintext1
查看当前pid单一参数值
jinfo -flags PID
plaintext1
查看当前pid所有参数值
jinfo -flag [+|-]
pid
plaintext
1 | 设置指定JVM参数的布尔值 |
- jinfo -flag
= pid
plaintext
1 | 设置指定JVM参数的值 |
jstat
jstack用于生成线程快照的, 命令语法:
plaintext
1 | jstack [options] pid |
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-m | 如果调用到本地方法的话,可以显示C/C++的堆栈 |
-l | 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 |
一般会查找最吃资源的线程id,然后转16进制进行筛选jstack <pid> | grep -A 30 <最吃资源的线程id>
jhat(jdk9中已被移除)
分析dump文件,会启动个http server,默认端口在7000, 命令语法:
plaintext
1 | jhat [-port 7000] <dump文件名> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!