- 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
jps:仅显示简单类名和 pidjps -l:输出主类或者 jar 的完全路径名jps -v:输出 JVM 参数jps -q:仅仅显示 Java 进程号
jstat
jstat -class PID:显示加载 class 的数量,及所占空间等信息jstat -compiler PID:显示 VM 实时编译的数量等信息jstat -gc PID:可以显示 gc 的信息,查看 gc 的次数,及时间。其中最后五项,分别是 young gc 的次数、young gc 的时间、full gc 的次数、full gc 的时间、gc 的总时间jstat -gccapacity PID:可以显示 VM 内存中三代(young/old/perm)对象的使用和占用大小jstat -gcnew PID:new 对象的信息jstat -gcnewcapacity PID:new 对象的信息及其占用量jstat -gcold PID:old 对象的信息jstat -gcoldcapacity PID:old 对象的信息及其占用量jstat -gcpermcapacity PID:perm 对象的信息及其占用量jstat -util PID:统计 gc 信息统计jstat -printcompilation PID:当前 VM 执行的信息除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题
jmap
jmap -F -dump:live,format=b,file={xxx.hprof} PID:live参数可选,指定后只转储堆中的活动对象;format=b表示生成二进制格式的 dump 文件;-F参数可选,表示当进程接近僵死时强制转储。jmap -histo:live PID:生成 Java 堆中对象的相关信息,包含数量以及占用的空间大小。jmap -heap PID:查看堆的使用状况信息。
jinfo
- 可以在运行时动态调整JVM参数(无需重启)
- 查看正在运行的Java应用程序的扩展参数
jinfo -flag <参数> PID:查看当前 pid 单一参数值jinfo -flags PID:查看当前 pid 所有参数值jinfo -flag [+|-]<name> pid:设置指定 JVM 参数的布尔值jinfo -flag <name>=<value> pid:设置指定 JVM 参数的值
jstack
jstack用于生成线程快照的, 命令语法:
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, 命令语法:
1 | jhat [-port 7000] <dump文件名> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!
