文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
性能调优
何时进行JVM调优?
遇到以下情况,就需要考虑进行JVM调优了:
- Heap内存(老年代)持续上涨达到设置的最大内存值
- Full GC 次数频繁
- GC 停顿时间过长(超过1秒)
- 应用出现OutOfMemory等内存异常
- 系统吞吐量与响应性能不高或下降
JVM调优基本原则:
大多数的Java应用不需要进行JVM优化
大多数导致GC问题的原因是代码层面的问题导致的(代码层面)
上线之前,应先考虑将机器的JVM参数设置到最优
减少创建对象的数量(代码层面)
减少使用全局变量和大对象(代码层面)
优先架构调优和代码调优,JVM优化是不得已的手段(代码、架构层面)
分析GC情况优化代码比优化JVM参数更好(代码层面)
JVM调优目标:
延迟:
- GC低停顿和GC低频率
没有FullGC
高吞吐量
JVM调优步骤:
一般情况下,JVM调优可通过以下步骤进行:
- 分析GC日志及Dump文件,判断是否需要优化,确定瓶颈问题点
- 确定JVM调优量化目标
- 确定JVM调优参数(根据历史JVM参数来调整)
- 依次调优内存、延迟、吞吐量等指标
- 对比观察调优前后的差异
- 不断的分析和调整,直到找到合适的JVM参数配置
- 找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪
JVM调优建议
年轻代和老年代的比例需要结合实际场景调整
- 由于老年代的GC成本通常都会比年轻代的成本要高许多。
- 所以建议适当地通过
Xmn
命令区设置年轻代的大小,最大限度的降低对象晋升到老年代的情况。合理设置Eden区和Survivor区比例
- 合理分配Eden区和Survivor区,尽量不要让对象进入老年代。