1 2 3 4 5 6
| jinfo: 可以输出并修改运行时的java 进程的opts。 jps: 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat: 一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jstack: 用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: jmap: 打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。 jconsole/jvisualvm: java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器
|
命令后接>>输出某一位置,如: jstat -gc 13976 >> d:\c.txt
jps
jstat
1
| 可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间
|
1
| 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量
|
- jstat -gcpermcapacity PID
- jstat -printcompilation PID
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题
jmap
jmap -F -dump:live,format=b,file={xxx.hprof} PID
1 2 3
| live参数是可选的,如果指定,则只转储堆中的活动对象;表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看的就是这些内存;如果没有指定,则转储堆中的所有对象。 format=b表示生成的dump文件是二进制格式的。 -F参数是可选的,表示当进程接近僵死时,可以添加此参数进行强制转储
|
1
| 生成java堆中对象的相关信息,包含数量以及占用的空间大小
|
jinfo
- 可以在运行时动态调整JVM参数(无需重启)
- 查看正在运行的Java应用程序的扩展参数
jstat
jstack用于生成线程快照的, 命令语法:
| 选项 | 作用 |
|---|
| -F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
| -m | 如果调用到本地方法的话,可以显示C/C++的堆栈 |
| -l | 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 |
一般会查找最吃资源的线程id,然后转16进制进行筛选jstack <pid> | grep -A 30 <最吃资源的线程id>
jhat(jdk9中已被移除)
分析dump文件,会启动个http server,默认端口在7000, 命令语法:
1
| jhat [-port 7000] <dump文件名>
|