關於JVM調優的工具及JVM 常見調優參數

六個命令行排查工具

我們一般使用 JDK 自帶的 6 個命令行工具來排查JVM。它們分別是:jps、jstat、jinfo、jmap、jhat 和 jstack,它們都位於 JDK 的 bin 目錄下,可以使用命令行工具直接運行。

jps(虛擬機進程狀況工具)

jps(JVM Process Status tool,虛擬機進程狀況工具),用於列出正在運行的 JVM 的 LVMID(Local Virtual Machine IDentifier,本地虛擬機唯一 ID),以及 JVM 的執行主類、JVM 啓動參數等信息。語法如下:

jps [options] [hostid]

常用的 options 選項:

-l:用於輸出運行主類的全名,如果是 jar 包,則輸出 jar 包的路徑;
-q:用於輸出 LVMID(Local Virtual Machine Identifier,虛擬機唯一 ID);
-m:用於輸出虛擬機啓動時傳遞給主類 main() 方法的參數;
-v:用於輸出啓動時的 JVM 參數。

jstat(虛擬機統計信息監視工具)

jstat(JVM Statistics Monitoring Tool,虛擬機統計信息監視工具)用於監控虛擬機的運行狀態信息。

查詢後的參數說明:

參數 說明
S0C 年輕代中第一個存活區的大小
S1C 年輕代中第二個存活區的大小
S0U 年輕代中第一個存活區已使用的空間(字節)
S1U 年輕代中第二個存活區已使用的空間(字節)
EC Edem 區大小
EU 年輕代中 Edem 區已使用的空間(字節)
OC 老年代大小
OU 老年代已使用的空間(字節)
YGC 從應用程序啓動到採樣時 young gc 的次數
YGCT 從應用程序啓動到採樣時 young gc 的所用的時間(s)
FGC 從應用程序啓動到採樣時 full gc 的次數
FGCT 從應用程序啓動到採樣時 full gc 的所用的時間
GCT 從應用程序啓動到採樣時整個 gc 所用的時間

jstat 常用的查詢參數有:

-class,查詢類加載器信息;
-compiler,JIT 相關信息;
-gc,GC 堆狀態;
-gcnew,新生代統計信息;
-gcutil,GC 堆統計彙總信息。

jinfo(查詢虛擬機參數配置工具)

jinfo(Configuration Info for Java)用於查看和調整虛擬機各項參數。語法如下:

jinfo <option> <pid>

jmap(堆快照生成工具)

jmap(Memory Map for Java)用於查詢堆的快照信息。

jhat(堆快照分析功能)

jhat(JVM Heap Analysis Tool,堆快照分析工具)和 jmap 搭配使用,用於啓動一個 web 站點來分析 jmap 生成的快照文件。

jstack(查詢虛擬機當前的線程快照信息)

jstack(Stack Trace for Java)用於查看當前虛擬機的線程快照,用它可以排查線程的執行狀況,例如排查死鎖、死循環等問題。

兩個可視化排查工具

JConsole 和 JVisualVM 都位於 JDK 的 bin 目錄下,JConsole(Java Monitoring and Management Console)是最早期的視圖調試工具。

用 JConsole 可以監控線程、CPU、類、堆以及 VM 的相關信息,同樣我們可以通過線程這一頁的信息,發現之前我們故意寫的死鎖問題。

JVisualVM 既可以調試本地也可以調試遠程服務器

JVM 調優

JVM 調優主要是根據實際的硬件配置信息重新設置 JVM 參數來進行調優的。

JVM 常見調優參數包含以下這些:

-Xmx,設置最大堆內存大小;
-Xms,設置初始堆內存大小;
-XX:MaxNewSize,設置新生代的最大內存;
-XX:MaxTenuringThreshold,設置新生代對象經過一定的次數晉升到老生代;
-XX:PretrnureSizeThreshold,設置大對象的值,超過這個值的對象會直接進入老生代;
-XX:NewRatio,設置分代垃圾回收器新生代和老生代內存佔比;
-XX:SurvivorRatio,設置新生代 Eden、Form Survivor、To Survivor 佔比。

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