使用 OpenJDK 8 运行 Java 程序,以下 JVM 标志
-Xloggc:/var/log/gc.log
导致生成的日志文件包含以下行
CommandLine flags: -XX:InitialHeapSize=263196800 -XX:MaxHeapSize=4211148800 -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
从而提供正在运行的程序的显式和隐式 JVM 参数。
使用 OpenJDK 17 运行 Java 程序,从而使用统一 JVM 日志记录,我无法弄清楚如何打印显式和隐式 JVM 参数。我尝试过这个选项
-Xlog:all=trace
对于最小的 Java 程序来说,会生成 21k 行日志记录,但是快速搜索
-XX:
却什么也没有得到。也试过
-Xlog:arguments=trace
但是少数输出行不包含我需要的内容。
以下是在 Linux x64 上重现该问题的最少步骤:
wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_x64_linux_hotspot_17.0.4.1_1.tar.gz
tar xvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.4.1_1.tar.gz
git clone https://github.com/jarirajari/helloworld.git
jdk-17.0.4.1+1/bin/java -Xlog:arguments=trace -XX:+UseG1GC -jar helloworld/helloworld.jar
输出如下,并且没有关于我传递给 java 可执行文件的 JVM 参数的信息:
[0.022s][trace][arguments] Memory size (original) 10485760 B (user defined: false)
[0.022s][trace][arguments] Memory size (adjusted) 10485760 B (modified: false)
[0.022s][trace][arguments] Memory size (adjustment) +0 B
[0.022s][trace][arguments] Global buffer size (original) 524288 B (user defined: false)
[0.022s][trace][arguments] Global buffer size (adjusted) 524288 B (modified: false)
[0.022s][trace][arguments] Global buffer size (adjustment) +0 B
[0.022s][trace][arguments] Thread local buffer size (original) 8192 B (user defined: false)
[0.022s][trace][arguments] Thread local buffer size (adjusted) 8192 B (modified: false)
[0.022s][trace][arguments] Thread local buffer size (adjustment) +0 B
[0.022s][trace][arguments] Number of global buffers (original) 20 (user defined: false)
[0.022s][trace][arguments] Number of global buffers (adjusted) 20 (modified: false)
[0.022s][trace][arguments] Number of global buffers (adjustment) +0
Hello world from HelloWorld.jar!
有什么想法吗?
java -XX:+UseG1GC -XX:+PrintCommandLineFlags -Xlog:gc:file=gc-%p.log -version
上述设置将创建一个具有最少 gc 输出的 gc 日志文件。
-XX:+PrintCommandLineFlags
将把命令行标志输出到 stderr。