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

CentOS7部署的Django项目Gunicorn启动/重启后变慢问题求助

排查方向与解决方案

1. 检查Gunicorn Worker内存泄漏与状态

  • 实时监控Gunicorn Worker的内存占用:
    ps aux | grep gunicorn
    
    观察每个worker进程的RES(常驻内存)数值,如果重启后持续增长,说明存在内存泄漏。此时可临时通过配置--max-requests 1000让worker处理指定数量请求后自动重启,缓解内存累积:
    修改Gunicorn服务的ExecStart行:
    ExecStart=/home/user/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/user/myproject/myproject.sock --max-requests 1000 --timeout 30 myproject.wsgi:application
    
  • 用htop持续追踪worker进程的资源变化,确认是否有内存异常飙升的情况。

2. 优化Gunicorn配置参数

  • 调整worker数量:推荐worker数量为2*CPU核心数 + 1,先查看CPU核心数:
    nproc
    
    比如CPU核心为4,则设置--workers 9,替换原配置中的--workers 3,避免请求排队。
  • 修正Unix Socket权限:添加--umask 0002确保Nginx能正常读写sock文件,防止请求转发阻塞:
    ExecStart=/home/user/myproject/myprojectenv/bin/gunicorn --workers 9 --bind unix:/home/user/myproject/myproject.sock --umask 0002 --max-requests 1000 --timeout 30 myproject.wsgi:application
    

3. 排查Nginx连接与日志

  • 查看Nginx错误日志与访问日志,检查是否存在请求超时或排队记录:
    tail -f /var/log/nginx/error.log
    tail -f /var/log/nginx/access.log
    
  • 调整Nginx连接数限制:在nginx.conf的events块中增加:
    worker_connections 4096;
    
    重启Nginx生效:systemctl restart nginx
  • 检查Nginx连接状态,排查是否有大量连接堆积:
    ss -tulpn | grep nginx
    

4. 定位Django应用内部耗时点

  • 开启Django请求耗时日志,在settings.py中添加:
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.request': {
                'handlers': ['console'],
                'level': 'INFO',
                'propagate': False,
            },
        },
    }
    
    重启Gunicorn后,查看日志中django.request的记录,找出耗时最长的请求。
  • 检查是否有定时任务(如Celery、crontab)在重启后几分钟启动,占用系统IO或内存资源。
  • 排查第三方API/服务调用是否存在延迟,这类外部依赖的缓慢会导致Django请求阻塞。

5. 系统层面隐性问题排查

  • 检查磁盘IO负载:
    iostat -x 1
    
    关注%util列,若接近100%说明磁盘IO瓶颈,需排查是否有大量文件读写或swap频繁触发。
  • 查看内存与swap使用情况:
    free -h
    
    若剩余内存不足且swap占用过高,会导致进程响应变慢,可考虑增加物理内存或优化应用内存占用。
  • 临时关闭SELinux测试:
    setenforce 0
    
    若问题缓解,说明SELinux存在隐性权限限制,需配置对应规则而非永久关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:13:10