本系列筆記主要基於《深入理解Java虛擬機:JVM高級特性與最佳實踐 第2版》,是這本書的讀書筆記。
如何查看JVM運行時參數,對於線上JVM調優是很關鍵的,因為只有知道了當前使用的JVM參數是什么值,才能知道如何進行調優。
以下JVM參數,可以用來打印JVM運行時參數及它們的值:
參數 | 說明 |
---|---|
-XX:+PrintFlagsInitial | 查看初始值 |
-XX:+PrintFlagsFinal | 查看最終的值,因為初始值有可能被修改 |
-XX:+UnlockExperimentalVMOptions | 解鎖實驗參數,JVM中有些實驗參數無法直接賦值,必須先使用此參數才能賦值 |
-XX:+UnlockDiagnosticVMOptions | 解鎖診斷參數 |
-XX:+PrintCommandLineFlags | 打印命令行參數 |
例如,使用PrintFlagsFinal命令查看JVM參數
java -XX:+PrintFlagsFinal -version
部分輸出內容如下:
其中,"="
表示的是初始值,":="
表示的是修改過后的值。
這條命令查看的是執行java
命令的當前進程,正式使用中,通常我們查看的是線上的Java程序進程,這時,就會用到JDK命令行工具:jps
和jinfo
。
所有的JDK工具都可以在Oracle官網的 Java Tools Reference 文檔中找到使用說明,這是主要參考。
jps
JDK自帶了一些命令行工具,其中jps和Linux命令ps一樣,都是查看進程的,不過jps只用來查看Java進程。
格式:jps [ options ] [ hostid ]
查看jps
的幫助信息:
使用jps
命令查看本地Java進程:
輸出Bootstrap
的是Tomcat進程,可以使用jps -l
輸出包路徑來確認:
使用jps -v
查看更多的參數:
jinfo
jinfo命令用來查看JVM的配置信息。
格式:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [ servier-id ] remote-hostname-or-IP
查看jinfo
的幫助信息:
使用jinfo -flag [參數] [pid]
查看Java堆的最大值:
查看是否使用了G1或者Parallel的收集器:
使用jinfo -flags [pid]
查看所有修改過的參數值:
總結
先通過jps
命令找到要查看的Java進程,再使用jinfo
命令就可以查看指定Java程序的運行時參數了。