You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中Django+Gunicorn(WSGI容器)资源占用过高求助

排查Django+Gunicorn(WSGI)容器资源占用过高的方向与解决方案

1. 调整Gunicorn Worker与线程配置

当前Gunicorn启动命令为gunicorn server.wsgi --bind 0.0.0.0:8000 --workers 4 --threads 4,Worker数量可能超出服务器承载能力:

  • 先用nproc查看Droplet的CPU核心数,Gunicorn官方推荐Worker数量为2 * CPU核心数 + 1,如果是1核服务器,4个Worker会引发频繁上下文切换,徒增CPU与内存消耗
  • 建议先降低Worker数测试:1核服务器改为--workers 2 --threads 2,2核服务器改为--workers 3 --threads 2,观察资源占用变化
  • CPU密集型业务减少线程数,IO密集型业务可适当增加线程,但需同步关注内存占用情况

2. 排查Django应用内部性能问题

  • 启用性能调试工具:安装django-debug-toolbar,查看每个请求的数据库查询次数、视图函数耗时,排查是否存在N+1查询、未优化的ORM操作或耗时逻辑
  • 检测内存泄漏:用memory_profiler对核心视图函数做内存分析,或在容器内执行top -p <gunicorn-worker-pid>,观察单个Worker进程的内存是否随请求持续上涨,若存在则需定位泄漏点(如全局变量未释放、第三方库内存泄漏)
  • 确认静态文件代理:检查Nginx配置是否正确拦截/static/、/media/这类静态资源请求,避免Django处理静态文件消耗额外资源(当前docker-compose已挂载静态卷,需确保Nginx配置文件中正确映射这些路径)

3. 容器层面优化与排查

  • 添加资源限制:在docker-compose.yml的backend服务中添加资源限制,防止容器占用过多主机资源:
    backend:
      # 原有配置...
      deploy:
        resources:
          limits:
            cpus: '0.5'  # 根据服务器核心数调整
            memory: 512M # 根据服务器内存调整
    
  • 检查容器日志:执行docker logs <backend-container-name>,查看是否存在数据库连接异常、频繁重连、请求报错等日志,这类情况可能导致资源异常消耗

4. 流量与请求分配排查

  • 分析访问日志:查看Nginx的访问日志,排查是否存在爬虫、恶意请求或大文件请求,这类请求可能导致WSGI容器持续高负载
  • 确认请求路由规则:检查Nginx配置中是否将请求合理分配到WSGI和ASGI容器,若所有请求都转发到WSGI容器(如ASGI仅处理WebSocket但无相关流量),会导致WSGI单独承担全部负载,需调整路由规则分流

内容的提问来源于stack exchange,提问作者Elabbasy00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:35:21