调优方法
一切都是为了这一步,调优,在调优之前,我们需要记住下面的原则:
1 、多数的 Java 应用不需要在服务器上进行 GC 优化;
2 、多数导致 GC 问题的 Java 应用,都不是因为我们参数设置错误,而是代码问题;
3 、在应用上线之前,先考虑将机器的 JVM 参数设置到最优(最适合);
4 、减少创建对象的数量;
5 、减少使用全局变量和大对象;
6 、 GC 优化是到最后不得已才采用的手段;
7 、在实际使用中,分析 GC 情况优化代码比优化 GC 参数要多得多;
GC 优化的目的有两个 :
1 、将转移到老年代的对象数量降低到最小;
2 、减少 full GC 的执行时间;
为了达到上面的目的,一般地,你需要做的事情有:
1 、减少使用全局变量和大对象;
2 、调整新生代的大小到最合适;
3 、设置老年代的大小为最合适;
4 、选择合适的 GC 收集器;
真正熟练的使用 GC 调优,是建立在多次进行 GC 监控和调优的实战经验上的,进行监控和调优的一般步骤为:
1 ,监控 GC 的状态
使用各种 JVM 工具,查看当前日志,分析当前 JVM 参数设置,并且分析当前堆内存快照和 gc 日志,根据实
际的各区域内存划分和 GC 执行时间,觉得是否进行优化;
2 ,分析结果,判断是否需要优化
如果各项参数设置合理,系统没有超时日志出现, GC 频率不高, GC 耗时不高,那么没有必要进行 GC 优
化;如果 GC 时间超过 1-3 秒,或者频繁 GC ,则必须优化;
注: 如果满足下面的指标,则一般不需要进行 GC :
Minor GC 执行时间不到 50ms ;
Minor GC 执行不频繁,约 10 秒一次;
Full GC 执行时间不到 1s ;
Full GC 执行频率不算频繁,不低于 10 分钟 1 次;
3 ,调整 GC 类型和内存分配
如果内存分配过大或过小,或者采用的 GC 收集器比较慢,则应该优先调整这些参数,并且先找 1 台或几
台机器进行 beta ,然后比较优化过的机器和没有优化的机器的性能对比,并有针对性的做出最后选择;
4 ,不断的分析和调整
通过不断的试验和试错,分析并找到最合适的参数
5 ,全面应用参数
如果找到了最合适的参数,则将这些参数应用到所有服务器,并进行后续跟踪。