每次GC过程都是对JVM堆空间的整理,JVM执行GC业务进程会进入暂停状态,GC优化的总体方向是尽可能减少对业务的影响。总体来说,GC调优是尽量降低GC频率和每次GC停顿时间。可以通过GC日志和jstat工具对GC进行实时监控分析和调优。
下面是jstat命令每隔1s打印的GC信息,内容只保留了GC频率和耗时相关的列信息,其他列未列出。jstat命令试用方法和输出信息说明,请参考jstat工具。
YGC YGCT FGC FGCT GCT 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 579 22.233 2 0.090 22.323 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 580 22.262 2 0.090 22.352 581 22.282 2 0.090 22.372 581 22.282 2 0.090 22.372 581 22.282 2 0.090 22.372 581 22.282 2 0.090 22.372 581 22.282 2 0.090 22.372 581 22.282 2 0.090 22.372 581 22.282 2 0.090 22.372 582 22.282 2 0.090 22.372 582 22.300 2 0.090 22.391 582 22.300 2 0.090 22.391 582 22.300 2 0.090 22.391 582 22.300 2 0.090 22.391 582 22.300 2 0.090 22.391 582 22.300 2 0.090 22.391 582 22.300 2 0.090 22.391
关于GC频率和GC耗时在什么范围内比较合理这个问题,没有统一答案,它们的值和服务器硬件资源(例如内存大小、CPU处理能力)和软件相关,每个业务不尽相同。
参考建议:
排查调优步骤和建议:
# /path/java -XX:DisableExplicitGC <other parameters>