JVM调优
1. 措施
1.0 前置知识
一般情况下,jvm参数配置合理,不需要调优,哪怕遇到性能问题问题,也是先选择优化程序,最后才是jvm调优。
1.0.1 jvm调优的时机:
- Heap内存(老年代)持续上涨达到设置的最大内存值;
- Full GC 次数频繁;
- GC 停顿时间过长(超过1秒);
- 应用出现OutOfMemory 等内存异常;
- 系统吞吐量与响应性能不高或下降。
1.0.2 目标:
吞吐量、延迟、内存占用三者类似CAP,构成了一个不可能三角,只能选择
其中两个进行调优,不可三者兼得。
- 延迟:GC低停顿和GC低频率;
- 低内存占用;
- 高吞吐量;
选择了其中两个,必然会会以牺牲另一个为代价。
下面展示了一些JVM调优的量化目标参考实例:
Heap 内存使用率 <= 70%;
Old generation内存使用率<= 70%;
avgpause <= 1秒;
Full gc 次数0 或 avg pause interval >= 24小时 ;
1.0.3 调优步骤
- 分析系统系统运行情况:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点;
- 确定JVM调优量化目标;
- 确定JVM调优参数(根据历史JVM参数来调整);
- 依次确定调优内存、延迟、吞吐量等指标;
- 对比观察调优前后的差异;
- 不断的分析和调整,直到找到合适的JVM参数配置;
- 找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。
1.1 尽可能减少大对象的产生
- 操作文件时,尽可能的多次操作,
1.2 尽可能让对象在年轻代被回收走
- 尽可能扩大年轻代的大小:
- 直接扩大堆内存大小
- 调整年轻代的比例
- 可以调整Eden区和S0,S1区的比例
- 调整年老代和年轻代的比例(慎用)
1.3 更换CMSGC 为G1GC
G1GC-JDK1.9版本的堆内存结构不再是之前的结构,而是使用块结构,但是仍保留分代的思想
G1GC回收机制:
有一个后台线程会记录当前回收利用率最高的块,将其作为最优先回收的块,当内存不足时,对该块进行回收,若回收后够用,则不再继续回收,大大降低STW的时间。(每个块可以在下次使用时作为不同的区使用)
2. JVM堆内存大小的调整
如何修改堆内存大小:
修改JVM堆大小的方式:
找到:IDEA安装目录下的-->bin-->idea.exe.vmoptions
//初始堆内存大小
-server-Xms128m
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~