書接上篇:
上篇博文 講解了 jps 命令獲取Java進程pid 和 啓動參數,jstat 獲取了相應的 堆的狀況以及垃圾回收的情況
此篇着重講解:
作用: 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
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
可以看到堆的具體情況,如下圖