xxl-job / xxl-job-executor-go

xxl-job 执行器(golang 客户端)
MIT License
431 stars 105 forks source link

压测踩坑:相同路由任务并发时造成的执行失败问题(虽然平时我们不会有这种情况,但也是个小问题) #75

Open The-fire-of-star opened 2 months ago

The-fire-of-star commented 2 months ago

背景:最近在做执行器压测,为了方便,我将相同的task复制了1000个,业务逻辑是sleep5s,执行策略是6s/次 问题:任务在执行的时候发生了大量调度错误There are tasks running。后来我只启动两个任务跑,发现第二个任务在跑的时候依然会报错。随后我将第一个任务停掉,发现而且这个报错是无法自愈的,即发现这不是个单纯的超时占用问题。查了源码发现runList和regList在多线程时共用了同一个task指针,导致同一个路由并发的时候会对task并发读写,导致runList的task.Id和task不一致,callback释放了不正确的task。