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

Django生产环境(Nginx+Gunicorn)图片上传极慢问题求助

Django+Nginx+Gunicorn 图片上传速度慢排查与优化方案

1. Nginx 配置优化

  • 调整客户端上传缓冲区:在Nginx的server块或全局http块添加以下配置,避免因小分块传输导致的频繁IO等待:
    client_max_body_size 100M;  # 数值设为比你允许的最大上传图片尺寸大即可
    client_body_buffer_size 16k;
    client_body_timeout 60s;
    
  • 启用高效传输参数:在http块开启sendfile和tcp优化,提升数据传输效率:
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    
  • 优化反向代理缓冲区:Nginx转发请求到Gunicorn时,调整代理缓冲区参数,减少数据拷贝开销:
    proxy_buffering on;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    

2. Gunicorn 配置优化

  • 合理设置工作进程与线程:根据服务器CPU核心数调整,比如4核机器可以用:
    gunicorn --workers 4 --threads 2 your_project.wsgi:application
    
    或者写在gunicorn.conf.py配置文件里:
    workers = 4
    threads = 2
    worker_class = 'sync'  # 大文件上传场景可尝试'gevent'异步 worker,需先安装gevent(pip install gevent)
    
  • 延长请求超时时间:防止上传大文件时被Gunicorn强制中断:
    timeout = 120
    keepalive = 5
    

3. 服务器系统层面优化

  • 调整内核网络参数:编辑/etc/sysctl.conf,添加以下参数提升网络传输性能:
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_wmem = 4096 16384 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_no_metrics_save = 1
    net.ipv4.tcp_window_scaling = 1
    
    执行sudo sysctl -p让配置立即生效。
  • 排查磁盘IO瓶颈:用iostat或iotop命令查看上传目录所在磁盘的读写负载,如果磁盘IO过高,换SSD或者调整存储挂载方式能明显提速。

4. 快速定位问题根源

  • 绕开Nginx测试Gunicorn:直接访问Gunicorn监听的端口(比如http://你的服务器IP:8000)上传图片,判断是Nginx还是Gunicorn的问题。
  • 检查日志找错误:查看Nginx日志(/var/log/nginx/access.log、error.log)和Gunicorn日志,看是否有缓冲区溢出、超时类的错误提示。
  • 本地测试排除网络问题:在服务器上用curl本地上传,确认不是外部带宽限制:
    curl -X POST -F "image=@/本地大图片路径.jpg" http://localhost:8000/你的上传接口/
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:07:32