JDK 8.x 微服务启动JVM参数调优实战

1.1 配置JVM启动参数

服务器配置

硬件资源
内存6Gi
CPU4核
APP_PARAM="-Xmx2g -Xms2g -Xmn768m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xss256k -XX:+UseG1GC -XX:+AlwaysPreTouch -XX:-ResizePLAB -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=200  -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"

1.2 解释

这是一个包含多个 Java 虚拟机(JVM)参数的变量 APP_PARAM,用于在启动 Java 程序时配置 JVM 的各种选项。让我们逐个解释这些参数的含义:

JVM参数解释
-Xmx2g设置 JVM 的最大堆内存为 2GB。这是 Java 堆可使用的最大内存量。
-Xms2g设置 JVM 的初始堆内存为 2GB。这是 Java 堆的初始内存大小,在 JVM 启动时将分配给堆。
-Xmn768m设置 JVM 的年轻代初始大小为 768MB。年轻代是 Java 堆中用于存放新创建的对象的区域。
-XX:MetaspaceSize=256m设置 Metaspace(元空间)的初始大小为 256MB。Metaspace 用于存放类的元数据。
-XX:MaxMetaspaceSize=256m设置 Metaspace(元空间)的最大大小为 256MB。当 Metaspace 达到这个大小时,JVM 将触发垃圾回收来回收不再使用的类元数据。
-Xss256k设置每个线程的栈大小为 256KB。这决定了每个线程可使用的内存大小。
-XX:+UseG1GC指定使用 G1 (Garbage-First) 垃圾回收器。G1 是一种现代的垃圾回收器,适用于大内存和多核处理器的应用。
-XX:+AlwaysPreTouch指定在 JVM 启动时,将堆的所有页面都预先分配和填充,以避免后续使用时的延迟。
-XX:-ResizePLAB禁用自适应的 Parallel Lab(PLAB)大小调整。PLAB 是 G1 回收器中用于优化对象分配的一种技术。
-XX:+ParallelRefProcEnabled启用并行的引用处理。这允许 G1 回收器在处理引用时使用并行处理。
-XX:+ExplicitGCInvokesConcurrent允许显式调用 System.gc() 时与并发标记周期并行执行垃圾回收。
-XX:MaxGCPauseMillis=200设置期望的最大 GC 暂停时间为 200 毫秒。G1 回收器将尽力保持 GC 暂停时间在这个范围内。
-XX:ParallelGCThreads=4设置并行垃圾回收的线程数为 4。这决定了在进行并行垃圾回收时使用的线程数量。
-XX:ConcGCThreads=2设置并发垃圾回收的线程数为 2。这决定了在进行并发垃圾回收时使用的线程数量。
  • 这些 JVM 参数可根据具体应用和硬件环境进行调整,以优化 Java 程序的性能和内存使用。
  • 请注意,某些参数可能在不同的 Java版本中或不同的 JVM 实现中具有不同的效果,因此建议根据具体情况进行测试和调优。

1.3 JVM参数优化思路

优化 JVM 参数是一个复杂的过程,需要根据具体应用和硬件环境进行调整。

以下是一些建议的优化措施:

1.3.1 调整堆内存大小

考虑根据应用的实际内存需求,适度增加堆的最大内存 -Xmx 和初始内存 -Xms。但不要过度分配,避免过大的堆导致频繁的垃圾回收。

1.3.2 年轻代大小

-Xmn 设置年轻代初始大小。根据应用的对象创建频率和堆大小,适度调整年轻代大小。较小的年轻代可能导致更频繁的垃圾回收,较大的年轻代可能会减少垃圾回收的频率。

1.3.3 Metaspace 大小

-XX:MetaspaceSize-XX:MaxMetaspaceSize 设置 Metaspace 的初始和最大大小。根据应用的类加载需求,适度增加 Metaspace 大小。

1.3.4 栈大小

-Xss 设置每个线程的栈大小。根据应用的线程需求,适度调整栈大小。过大的栈大小可能导致线程数受限于可用内存。

1.3.5 垃圾回收器选择

-XX:+UseG1GC 使用 G1 垃圾回收器是一个不错的选择,特别是在大内存和多核处理器环境下。

1.3.6 垃圾回收参数

根据实际情况调整垃圾回收器的参数,例如 -XX:MaxGCPauseMillis-XX:ParallelGCThreads-XX:ConcGCThreads。这些参数的调整需要在实际应用场景中进行性能测试和优化。

1.3.7 预分配内存

-XX:+AlwaysPreTouch 在 JVM 启动时预分配堆内存,避免后续内存分配导致的延迟。

1.3.8 禁用 ResizePLAB

-XX:-ResizePLAB 可以禁用 Parallel Lab(PLAB)大小调整。


  • 优化 JVM 参数需要综合考虑应用的性能需求、硬件环境和可用内存资源。
  • 建议在生产环境中进行测试和性能评估,逐步调整参数以达到最佳性能和内存利用率。
  • 同时,注意不要过度优化,避免因过多的参数调整而引入新的问题。

2. 常用JVM参数

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在进行 JDK 1.8 的 JVM 参数调优时,可以考虑以下几个方面: 1. 堆内存设置: - 调整初始堆大小和最大堆大小,使用 `-Xms` 和 `-Xmx` 参数来设置。根据应用的负载情况和服务器的可用内存,合理分配堆内存大小。 2. 垃圾回收器选择: - JDK 1.8 默认使用的是并行垃圾回收器(Parallel GC)。如果应用有较高的并发需求,可以考虑使用并发标记清除垃圾回收器(CMS GC)或 G1 垃圾回收器(G1 GC)。 3. 并行度设置: - 根据服务器的 CPU 核心数量和应用负载情况,调整并行垃圾回收的线程数。使用 `-XX:ParallelGCThreads` 参数来设置,并行垃圾回收线程的数量。 4. 元空间(Metaspace)设置: - 元空间是 JDK 1.8 中替代永久代的内存区域。可以使用 `-XX:MaxMetaspaceSize` 参数来设置元空间的最大大小。 5. 垃圾回收相关参数: - 根据应用的特点和性能需求,调整垃圾回收相关参数。例如,可以使用 `-XX:MaxGCPauseMillis` 来设置最大垃圾回收停顿时间,以平衡吞吐量和停顿时间。 6. 监控与调优工具: - 使用 JDK 自带的工具,如 jstat、jmap、jstack 等,来监控应用的内存、垃圾回收情况和线程状态。根据监控结果,进行针对性的调优。 注意,JVM 参数调优需要根据具体应用的特点和实际情况进行实验和测试,以获得最佳性能和稳定性。建议在进行参数调优前,先了解应用的负载情况和性能瓶颈,并备份原有的参数配置,以便在调优过程中出现问题时可以回滚。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客星云

谢谢认可,希望对你的学习有帮助

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值