书接上篇:
上篇博文 讲解了 jps 命令获取Java进程pid 和 启动参数,jstat 获取了相应的 堆的状况以及垃圾回收的情况
此篇着重讲解:
1.jinfo:Java 配置信息工具
作用: jinfo (Configuration Info for java )的作用是实时地查看和调整虚拟机各项参数。
命令行格式
jinfo [options] pid
注意本系列博文均在阿里云 centos 系统上演示 ,JDK1.8
使用 jps -v 可以查看虚拟机启动时显式的指定的参数列表,但是如果想要知道未被显式指定的参数的系统默认值,
JDK1.6以上 两种方式:
1. java -flag pid ActiveProcessorCount
ActiveProcessorCount 此参数是你要看的默认的配置
如下示例:
2. java -XX:+PrintFlagsFinal
2. jamp:java 内存映像工具
jmap (Memory Map for java )命令用于生成堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,要想获取Java 堆转储快照,,还有一些比较暴利的手段: 譬如 在 JVM启动参数中配置 -XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件。通过-XX:+HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]健让虚拟机生成dump 文件。
jmap 的作用并不仅仅是为了获取dump文件,它还可以查询finallize执行队列,java 堆和永久代的详细信息,如空间使用率,当前使用的是哪种垃圾收集器。
jmap 命令格式:
jamp [option] vmid
其中option 选项的合法值与具体含义见表下
选项 | 作用 (服务器端:标红的最常用) |
-dump | 生成Java堆转储快照。格式为:-dum:[live,]format=b,file=<filename>,其中live子参数说明是否值dump出存活的对象 |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效 |
-heap | 显示java 堆详细信息,如使用哪种回收器,参数配置,分带情况,只在Linux/Soloaris平台下有效 |
-histo | 显示堆中对象统计信息,包括类,实例数量,合计容量 |
-permstat | 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Sloaris平台下有效 |
-F | 当虚拟机进程对-dump 选项没有响应的时候,可以使用这个选项强制生成dump快照。只在Linux/Solaris平台下有效。 |
使用示例如下:
命令:
jmap -dump:format=b,file=money.dump 29919
其中 29919为 PID ,money.dump 为生成的dump文件名称,如果不加具体路径,就在当前命令的文件夹下
常规操作是把这个生成的dump文件,压缩后下载下来,进行分析
本地解压后用工具:jvisualvm 【JDK自带该工具】
我用的是MAC系统,选择左上角 文件--->装入--->
装入以后可以看到响应的对象占据的大小
jmap -heap 29919
可以看到堆的具体情况,如下图