怎么在linux上设置jvm参数
怎么在linux上设置jvm参数详细介绍
在 Linux 上设置 JVM 参数主要通过启动 Java 应用时的命令行参数实现,以下是具体操作方式和常见参数说明:
一、核心设置方式
JVM 参数需在启动 Java 进程时通过java -X参数或java -D参数传递,常见形式为:
bash
JVM参数 你的应用.jarJVM参数 主类全限定名
二、常见 JVM 参数分类
1.
堆内存参数(最常用)
-Xms<size>:设置堆内存初始大小(如-Xms512m表示初始 512MB)。-Xmx<size>:设置堆内存最大大小(如-Xmx2g表示最大 2GB)。-Xmn<size>:设置年轻代大小(如-Xmn1g,剩余内存自动分配给老年代)。-XX:MetaspaceSize=<size>:设置元空间(JDK8+,替代永久代)初始大小(如-XX:MetaspaceSize=256m)。-XX:MaxMetaspaceSize=<size>:设置元空间最大大小(默认无限制,建议显式指定如-XX:MaxMetaspaceSize=512m)。
2.
垃圾回收(GC)参数
- 指定 GC 算法:
-XX:+UseSerialGC:串行 GC(适合小内存、单 CPU 场景)。-XX:+UseParallelGC:并行 GC(适合 CPU 密集型、吞吐量优先场景)。-XX:+UseG1GC:G1 收集器(适合大内存、低延迟场景,JDK9 + 推荐)。-XX:+UseZGC:ZGC 收集器(超低延迟,JDK11 + 实验特性)。
- GC 日志:
-XX:+PrintGCDetails:打印 GC 详细日志。-Xloggc:/path/gc.log:指定 GC 日志输出路径(如-Xloggc:/var/log/app_gc.log)。-XX:+UseGCLogFileRotation:启用 GC 日志滚动。-XX:NumberOfGCLogFiles=5:保留 5 个历史日志文件。-XX:GCLogFileSize=100M:每个日志文件最大 100MB。
3.
其他常用参数
-XX:+HeapDumpOnOutOfMemoryError:OOM 时自动生成堆转储文件。-XX:HeapDumpPath=/path/heapdump.hprof:指定堆转储文件路径(如-XX:HeapDumpPath=/var/log/)。-XX:MaxDirectMemorySize=<size>:限制直接内存(DirectByteBuffer)最大大小(如-XX:MaxDirectMemorySize=1g)。-D参数名=值:设置系统属性(如-Duser.timezone=Asia/Shanghai设置时区)。
三、示例:完整启动命令
假设你有一个 Spring Boot 应用app.jar,需要设置:
- 堆内存初始 512MB,最大 2GB;
- 年轻代 1GB;
- 使用 G1GC;
- 记录 GC 日志到
/var/log/app_gc.log; - OOM 时生成堆转储到
/var/log/。
启动命令如下:
bash
-Xloggc:/var/log/app_gc.log
/var/log/
app.jar
四、注意事项
- 参数顺序无关:JVM 会最终合并参数(后定义的同名参数可能覆盖前一个,需注意顺序)。
- 生产环境建议:
- 始终显式设置
-Xms和-Xmx并保持相等,避免堆扩容带来的性能波动。 - 根据应用类型选择 GC 算法(如电商大促场景推荐 G1GC,低延迟交易系统可选 ZGC)。
- 定期分析 GC 日志(可用
gceasy.io或JProfiler工具),优化内存和 GC 配置。
- 始终显式设置
- 验证参数是否生效:启动应用后,通过
jinfo -flags <进程ID>查看实际生效的 JVM 参数。