项目中一直使用celery来做异步任务的执行, broker使用的是redis。 最近每天都会有几次redis(带宽10M)写入带宽超过80%报警, 报警的时候查看redis log 没有发现大量数据写入。经过仔细查看发现大量下面的消息:

这条命令应该是celery在 subscribe result(猜测, 具体逻辑不清楚)。 celery result 里存储了40w+的数据, 突然想到是不是这条命令是慢查询,导致写操作有积压。 经过查看, 发现果然这个命令报了好多慢查询, 查询时间在800ms左右。
解决方法:
celery 配置增加:task_ignore_result = True
发现celery result 在逐渐减少。 经过大概一天的时间, celery result 为0。 这期间没有发生写入带宽报警。 写入带宽一直维持在10%以下。
项目使用Celery及Redis作为broker时遇到Redis写带宽频繁报警的问题,通过排查发现是由于大量慢查询造成,最终通过设置task_ignore_result=True解决了问题。
169

被折叠的 条评论
为什么被折叠?



