当前位置: 首页 > article >正文

什么时候用到 JVM 调优,调优哪些参数

以下是针对 JVM 调优场景及核心参数的整理:


什么时候需要 JVM 调优?

  1. 性能显著下降

    • 应用响应变慢,吞吐量降低,且通过代码优化无法解决时。
    • 例如:频繁 Full GC 导致长时间停顿(Stop-The-World)。
  2. 内存异常问题

    • 频繁出现 OutOfMemoryError(内存溢出)或 StackOverflowError(栈溢出)。
    • 堆/元空间内存持续增长,存在内存泄漏风险。
  3. 资源利用率不合理

    • 堆内存分配过大导致系统资源浪费,或过小导致频繁扩容/GC。
    • CPU 占用率高且与业务逻辑无关(如 GC 线程占用过多)。
  4. 垃圾回收行为异常

    • Young GC 或 Full GC 频率过高、耗时过长。
    • 对象晋升到老年代的速度异常(可能导致“内存抖动”)。
  5. 特殊场景需求

    • 需要低延迟(如金融交易系统)或高吞吐量(如批处理任务)。
    • 优化启动速度(如微服务冷启动时间过长)。

调优的核心参数

1. 堆内存相关
  • -Xms / -Xmx:初始堆和最大堆大小(建议设为相同值避免动态扩容)。
  • -Xmn:新生代大小(直接影响 Young GC 频率)。
  • -XX:MetaspaceSize / -XX:MaxMetaspaceSize:元空间初始和最大值(替代 PermGen)。
2. 垃圾回收器选择
  • G1(推荐)-XX:+UseG1GC(均衡延迟与吞吐量)。
  • ZGC-XX:+UseZGC(超低延迟,JDK 11+)。
  • Shenandoah-XX:+UseShenandoahGC(低延迟,JDK 12+)。
  • Parallel GC-XX:+UseParallelGC(高吞吐量)。
3. 内存分配策略
  • -XX:NewRatio:老年代与新生代的比例(默认 2,即老年代占 2/3)。
  • -XX:SurvivorRatio:Eden 区与 Survivor 区的比例(默认 8:1:1)。
4. GC 日志与监控
  • -XX:+PrintGCDetails:打印详细 GC 日志。
  • -XX:+HeapDumpOnOutOfMemoryError:内存溢出时自动生成堆转储文件。
  • -Xloggc:<file>:将 GC 日志输出到指定文件。
5. 其他关键参数
  • -XX:MaxTenuringThreshold:对象晋升老年代的年龄阈值。
  • -XX:ParallelGCThreads:并行 GC 线程数(根据 CPU 核数调整)。
  • -XX:ConcGCThreads:并发 GC 线程数(如 G1 的并发标记阶段)。

调优建议

  1. 先分析后调优:使用工具(如 jstatVisualVMMAT)监控 GC 行为、内存分配。
  2. 小步迭代:每次只调整 1-2 个参数,观察效果后再继续。
  3. 场景优先:根据业务需求选择垃圾回收器(如低延迟选 G1/ZGC,高吞吐选 Parallel GC)。

通过合理配置,可显著减少 GC 停顿时间、提升吞吐量,并避免内存相关错误。


http://www.kler.cn/a/612594.html

相关文章:

  • Android 计算已安装应用的大小
  • 闲聊IT - 面向服务架构(SOA)的发展历史
  • 北理工计算机考研复试上机2017年真题
  • HTML5 新的 Input 类型学习笔记
  • 新一代ITSM:燕千云重构企业智慧服务生态体系
  • 手写数据库MYDB(一):项目启动效果展示和环境配置问题说明
  • 【测试工具】如何使用 burp pro 自定义一个拦截器插件
  • 工具介绍《WireShark》
  • Ubuntu22.04美化MacOS主题
  • 前端技术(28) : 拖拽、粘贴和点击浏览文件上传
  • 3大支柱+8种方法:拆解分布式系统性能优化的底层逻辑
  • 谷歌决定终止开源Android
  • 【黑皮书】 AVL树
  • kafka部署手册
  • 关于ArcGIS中加载影像数据,符号系统中渲染参数的解析
  • HarmonyOS:GridObjectSortComponent(两个Grid之间网格元素交换)
  • 深度探秘K8s服务(Service):架构基石与应用实践
  • 【LeetCode 热题 100】解答汇总
  • 苏宁开放平台关键字搜索接口接入教程‌
  • springboot 四层架构之间的关系整理笔记一