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

可以看到堆的具體情況,如下圖