一、问题背景
二、分析过程
- 2.1 参数配置
- 2.2 定位过程
- 2.3 JVM分析
- 2.4 问题分析
三、解决方案
一、问题背景
prometheus监控报警生效后,某服务每天的上午 8-12 点间会有fullGC的报警;
排查并解决该问题;
二、分析过程
2.1 参数配置
JVM 参数配置如下:
-Xms3g -Xmx3g -Xmn1g -XX:MetaspaceSize=128m -XX:ParallelGCThreads=5 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError
新生代大小:1G;
新生代垃圾收集器:ParNewGC;
老年代大小:2G;
老年代垃圾收集器:ConcMarkSweepGC;
CMS触发条件:老年代内存占用达到80%及以上;
2.2 定位问题
1.由于报警的时间点都集中在上午的 8-12 点之间,怀疑是由于某个定时任务造成的;
2.定位具体的定时任务,有两个定时任务的时间设置基本满足;
任务1: 更新客户信息
CustomerScheduleJobService.updateCustomerDataDaily 0 0/30 8,9,10,11,12 * * ?
任务2: 创建客户任务
CustomerStaffScheduleJobService.jobCreateTask 0 10,40 7,8,9,10,11 * * ?