JVM调优

1. 措施

1.0 前置知识

一般情况下,jvm参数配置合理,不需要调优,哪怕遇到性能问题问题,也是先选择优化程序,最后才是jvm调优。

1.0.1 jvm调优的时机:

  1. Heap内存(老年代)持续上涨达到设置的最大内存值;
  2. Full GC 次数频繁;
  3. GC 停顿时间过长(超过1秒);
  4. 应用出现OutOfMemory 等内存异常;
  5. 系统吞吐量与响应性能不高或下降。

1.0.2 目标:

吞吐量、延迟、内存占用三者类似CAP,构成了一个不可能三角,只能选择
其中两个进行调优,不可三者兼得。

  • 延迟:GC低停顿和GC低频率;
  • 低内存占用;
  • 高吞吐量;

选择了其中两个,必然会会以牺牲另一个为代价。

下面展示了一些JVM调优的量化目标参考实例:
Heap 内存使用率 <= 70%;
Old generation内存使用率<= 70%;
avgpause <= 1秒;
Full gc 次数0 或 avg pause interval >= 24小时 ;

1.0.3 调优步骤

  1. 分析系统系统运行情况:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点;
  2. 确定JVM调优量化目标;
  3. 确定JVM调优参数(根据历史JVM参数来调整);
  4. 依次确定调优内存、延迟、吞吐量等指标;
  5. 对比观察调优前后的差异;
  6. 不断的分析和调整,直到找到合适的JVM参数配置;
  7. 找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。

1.1 尽可能减少大对象的产生

  1. 操作文件时,尽可能的多次操作,

1.2 尽可能让对象在年轻代被回收走

  1. 尽可能扩大年轻代的大小:
    1. 直接扩大堆内存大小
    2. 调整年轻代的比例
      1. 可以调整Eden区和S0,S1区的比例
      2. 调整年老代和年轻代的比例(慎用)

1.3 更换CMSGC 为G1GC

G1GC-JDK1.9版本的堆内存结构不再是之前的结构,而是使用块结构,但是仍保留分代的思想

G1GC回收机制:

有一个后台线程会记录当前回收利用率最高的块,将其作为最优先回收的块,当内存不足时,对该块进行回收,若回收后够用,则不再继续回收,大大降低STW的时间。(每个块可以在下次使用时作为不同的区使用)

2. JVM堆内存大小的调整

如何修改堆内存大小:

​ 修改JVM堆大小的方式:

​ 找到:IDEA安装目录下的-->bin-->idea.exe.vmoptions

//初始堆内存大小
-server-Xms128m

posted @   瓜洲渡雪  阅读(297)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示