生产环境Java应用有哪些必须要设置的jvm参数

在生产环境中运行 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 应用,可以根据具体需求进一步调整。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值