JVM常见问题排查系列【002】 常用命令案例

书接上篇:

上篇博文 讲解了  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

可以看到堆的具体情况,如下图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章