关注“Java后端技术全栈”
回复“000”获取大量电子书
前面已经讲过了jps和jstat调优工具。今天我们继续说一下其它4个工具。这些工具都在jdk的bin目录下。
如何使用jinfo工具
jinfo显示虚拟机配置信息,我们通过jinfo --help能看到相应的参数:
option说明
我们可以先使用jps找到pid。
jinfo pid会输出一堆相关信息
jinfo -flags pid
用来输出JVM的全部参数
jinfo -flag name pid
使用该命令,可以查看指定的name为 JVM参数的值。
如:查看当前 JVM进程是否开启打印·GC日志。
同样的可以使用
jinfo -flag [+|-]name pid
来开启或者关闭对应名称的参数 。
也可以使用
jinfo -sysprops pid
来输出当前 JVM进行的全部的系统属性
如何使用jmap工具
jmap(Java Memory Map) 命令,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。jmap以生成 java程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看ClassLoader 的信息以及 finalizer 队列。
jmap命令可以获得运行中的JVM的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。可以使用jmap生成Heap Dump。
Memory = direct memory(直接内存) +JVM memory(MaxPermSize +Xmx);
jmap --help打印辅助信息
option说明
使用命名查看JVM的heap信息
jmap -heap pid
输出Java堆详细信息 ;
使用
jmap -histo:live pid
输出堆中对象的相关统计信息。
使用
jmap -finalizerinfo pid
输出等待终结的对象信息
也可以使用
jmap -clstats pid
来输出类加载器信息 。
如何使用jstack工具
jstack命令最大的作用就是用来生成thread dump文件,thread dump文件中记录了某一时刻CPU信息 。
option书面
jstack pid
jstack命令会打印出所有的线程,包括用户自己启动的线程和JVM后台线程,我们主要关注的是用户线程;
1"http-nio-8080-exec-8" #26 daemon prio=5 os_prio=0 tid=0x000000005b940000 nid=0x1e2c waiting on condition [0x000000005c0be000] java.lang.Thread.State: WAITING (parking)
常用命令
1# 查询进程的线程信息 输出到jstatck_13324文件中 2jstack 13324 > jstatck_13324 3# 十进制转换为十六进制 4printf "%x\n" 21742
如何使用jhat工具
JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。
常用方式
1#分析 dump 文件 2jhat -J-Xmx512M dump.phrof 3 4#对比 dump 文件 5jhat -baseline dump2.phrof dump1.phrof
代码案例
1public class JhatTest { 2 public static void main(String[] args) { 3 while(true) { 4 String string = new String("老田"); 5 System.out.println(string); 6 } 7 } 8}
运行,使用jps获取进程pid
再使用jmap -dump:format=b,file=heapDump pid
再到对应heapDump的包目录下执行
jhat heapDump
然后可以通过访问
一般查看堆异常情况主要看这个两个部分:
**Show instance counts for all classes (excluding platform)**,平台外的所有对象信息。如下图:
Show heap histogram 以树状图形式展示堆情况
具体问题排查的时候,需要结合代码,然后观察是否大量应该被回收的对象在一直被引用或者是否有占用内存特别大的对象无法被回收。
觉得有帮助就帮忙点个“在看”呗~
推荐阅读:
《Spring Cloud与Docker微服务架构实战》.pdf
本文分享 CSDN - 田维常。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。