在生产环境中运行 Java 应用时,设置 JVM 参数至关重要。下面是一些常用的 JVM 参数及其示例写法:
1. 内存管理参数
-
堆内存大小:
-
-Xms<size>
: 设置初始堆内存大小。 -
示例:
-Xms2g
(设置初始堆内存为 2GB) -
-Xmx<size>
: 设置最大堆内存大小。 -
示例:
-Xmx4g
(设置最大堆内存为 4GB)
-
-
新生代内存大小:
-Xmn<size>
: 设置新生代内存大小。- 示例:
-Xmn1g
(设置新生代内存为 1GB)
2. 垃圾收集器设置
-
选择合适的垃圾收集器:
-
-XX:+UseG1GC
: 使用 G1 垃圾收集器。 -
示例:
-XX:+UseG1GC
-
-XX:+UseConcMarkSweepGC
: 使用 CMS 垃圾收集器。 -
示例:
-XX:+UseConcMarkSweepGC
-
-XX:+UseParallelGC
: 使用并行垃圾收集器。 -
示例:
-XX:+UseParallelGC
-
-
G1GC 特定参数:
-
-XX:MaxGCPauseMillis=<N>
: 设置垃圾收集的最大暂停时间。 -
示例:
-XX:MaxGCPauseMillis=200
(设置最大暂停时间为 200 毫秒) -
-XX:InitiatingHeapOccupancyPercent=<N>
: 设置触发并发垃圾收集的堆占用百分比。 -
示例:
-XX:InitiatingHeapOccupancyPercent=45
(设置为堆占用 45% 时触发垃圾收集)
-
3. 线程栈大小
-Xss<size>
: 设置每个线程的栈大小。- 示例:
-Xss512k
(设置每个线程的栈大小为 512KB)
4. GC 日志参数
-
-XX:+PrintGCDetails
: 输出详细的 GC 日志。 -
示例:
-XX:+PrintGCDetails
-
-XX:+PrintGCDateStamps
: 在 GC 日志中添加时间戳。 -
示例:
-XX:+PrintGCDateStamps
-
-Xloggc:<file>
: 将 GC 日志输出到指定文件。 -
示例:
-Xloggc:/var/log/myapp/gc.log
-
-XX:+UseGCLogFileRotation
: 启用 GC 日志轮转。 -
示例:
-XX:+UseGCLogFileRotation
-
-XX:NumberOfGCLogFiles=<N>
: 设置 GC 日志文件的最大数量。 -
示例:
-XX:NumberOfGCLogFiles=5
(设置 GC 日志文件的最大数量为 5) -
-XX:GCLogFileSize=<size>
: 设置 GC 日志文件的大小。 -
示例:
-XX:GCLogFileSize=20M
(设置 GC 日志文件的大小为 20MB)
5. 性能调优参数
-
-XX:+HeapDumpOnOutOfMemoryError
: 在内存溢出时生成堆转储文件。 -
示例:
-XX:+HeapDumpOnOutOfMemoryError
-
-XX:HeapDumpPath=<file-path>
: 指定堆转储文件的路径。 -
示例:
-XX:HeapDumpPath=/var/log/myapp/heapdump.hprof
-
-XX:+ExitOnOutOfMemoryError
: 在内存溢出时退出 JVM。 -
示例:
-XX:+ExitOnOutOfMemoryError
6. 类加载和编译参数
-
-XX:MetaspaceSize=<size>
: 设置元空间初始大小。 -
示例:
-XX:MetaspaceSize=128m
(设置元空间初始大小为 128MB) -
-XX:MaxMetaspaceSize=<size>
: 设置元空间最大大小。 -
示例:
-XX:MaxMetaspaceSize=256m
(设置元空间最大大小为 256MB) -
-XX:TieredCompilation
: 启用分层编译。 -
示例:
-XX:TieredCompilation
7. 其他
-
-Dfile.encoding=UTF-8
: 设置应用的默认字符编码为 UTF-8。 -
示例:
-Dfile.encoding=UTF-8
-
-Duser.timezone=<timezone>
: 设置应用的默认时区。 -
示例:
-Duser.timezone=UTC
-
-Djava.security.egd=file:/dev/./urandom
: 加快容器化应用的启动速度。 -
示例:
-Djava.security.egd=file:/dev/./urandom
综合示例
将所有这些参数组合起来,可以得到如下启动命令:
java \
-Xms4g \
-Xmx4g \
-Xmn1g \
-Xss512k \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:InitiatingHeapOccupancyPercent=45 \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:/var/log/myapp/gc.log \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=5 \
-XX:GCLogFileSize=20M \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/var/log/myapp/heapdump.hprof \
-XX:+ExitOnOutOfMemoryError \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=256m \
-XX:TieredCompilation \
-Dfile.encoding=UTF-8 \
-Duser.timezone=UTC \
-Djava.security.egd=file:/dev/./urandom \
-jar myapp.jar
这个示例适合大部分生产环境的 Java 应用,可以根据具体需求进一步调整。