【celery 内存泄漏问题的排查->task_time_limit】

博客讲述了在腾讯云集群上运行Celery时遇到的worker半小时重启的问题,原因是内存泄漏。经过分析资源监控图,发现内存使用在半小时内达到1000Mi后pod重启。解决方案包括移除任务的软硬时间限制,并参考了Celery的GitHub上的相关讨论。经过修改代码并观察,内存泄漏问题得到解决。
摘要由CSDN通过智能技术生成

项目场景:

提示:通过celery执行大量爬虫任务


问题描述

提示:celery 的 worker每运行半小时就会重启,python3.8.7 celery5.2.3 redis作为中间人

@celery_app.task(soft_time_limit=60)  # time_limit 设置硬超时时间
def test(xxx):
    ...

原因分析:

提示:由于celery worker是在腾讯云集群上运行的,查看pod运行的资源监控图
在这里插入图片描述

pod limit设置为200Mi-800Mi,可以看到差不多半小时达到1000Mi后就pod就开始重启,内存泄漏应该就是造成pod不断重启的原因。


解决方案:

提示:1.google大法搜一搜,发现这个
在这里插入图片描述
不过是2013年的不知道还行不行。

2.再去celery github上看看
在这里插入图片描述
在issuess搜索oom,可以看到关于内存泄漏大量的bug反馈。
有说5.2.3已经修复了一个小泄漏(PS:看来还不是一个地方有问题),不过我们已经是最新版本了。

再继续看看,发现这个
在这里插入图片描述
可以看到13年到18年这个问题竟然还存在,我们可以去掉这个软硬时间试试看。

@celery_app.task  # 不再设置软硬超时时间
def test():
    ...

3.修改代码如上,更新到pod
运行一段时间后发现没有重启了,我们查看资源情况,如图
在这里插入图片描述

可以看到已经不会出现内存泄漏的问题。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我想将frontend 也是用volumes,将其映射到/app/frontend目录,在/app/frontend下install以及build,如何实现 docker-compose.yml文件: version: '3' services: frontend: build: context: ./frontend dockerfile: Dockerfile ports: - 8010:80 restart: always backend: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: python manage.py runserver 0.0.0.0:8000 ports: - 8011:8000 restart: always celery-worker: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server worker -l info --pool=solo --concurrency=1 depends_on: - redis - backend restart: always celery-beat: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler depends_on: - redis - backend restart: always redis: image: redis:latest ports: - 6379:6379 restart: always mysql: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=sacfxSql258147@ ports: - 8016:3306 volumes: - ./mysql:/var/lib/mysql restart: always frontend:dockerfile文件 FROM node:16.18.1 WORKDIR /app/frontend COPY package*.json ./ RUN npm install COPY . . RUN npm run build:prod FROM nginx:latest COPY --from=0 /app/frontend/dist/ /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
最新发布
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值