本系列筆記主要基於《深入理解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程序的運行時參數了。
