1,发现线上的queue入库很慢
因为我发现
2024-11-14 12:24:22.897 [] [Thread-47] INFO com.hp.nova.runner.Task3NewStructRedisQueueRunner.run [93] : eisrq.getType()======3
.....
.....
.....
2024-11-14 12:25:57.653 [] [Thread-47] INFO com.hp.nova.runner.Task3NewStructRedisQueueRunner.run [93] : eisrq.getType()======3
这个线程Task3NewStructRedisQueueRunner 负责batch insert struct表2000多条用了35多秒
一开始怀疑数据库问题,但是发现数据库服务器cpu很低,io也正常,并且show processlist也没有发现blocking的insert语句
然后我就自己写了个batch insert的语句直接在mysql batch insert也很快 不到1秒
后来发现了问题,不是mysql的问题,而是java服务的问题,在如下2个info logo之间打印了很多其他job的info,我猜测肯定是这个机器ec2是8核然后
2024-11-14 12:24:22.897 [] [Thread-47] INFO com.hp.nova.runner.Task3NewStructRedisQueueRunner.run [93] : eisrq.getType()======3
.....
.....
.....
2024-11-14 12:25:57.653 [] [Thread-47] INFO com.hp.nova.runner.Task3NewStructRedisQueueRunner.run [93] : eisrq.getType()======3
Task3NewStructRedisQueueRunner刚开始执行的时候就被其他的job thread抢占了,导致Task3NewStructRedisQueueRunner 这个thread被blocking了30多秒
后来终于发现了问题所在,如下所示本来应该一天执行一次的job被错误的配置成了2分钟一次,这个任务的计算量还挺大的,导致8核的cpu一直被它抢占,居然就这样线上2分钟一次
的大量抢占cpu还没有很慢。。。
taskAutoCompleteScheduleJob:
switch: true
cron: 0 */2 * * * ?
改成
taskAutoCompleteScheduleJob:
switch: true
cron: 0 0 1 * * ?
标签:insert,eisrq,batch,Task3NewStructRedisQueueRunner,.....,mysql From: https://www.cnblogs.com/xiaohanlin/p/18546365