腾讯云服务器Ubuntu 22.04部署Django项目性能优化建议?

在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目时,性能优化需要从应用层、Web 服务器层、数据库层、缓存层以及基础设施层多个维度协同进行。以下是系统化的优化建议:


一、应用层优化(Django 本身)

  1. 启用生产模式配置

    # settings.py
    DEBUG = False
    ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1']
    SECURE_SSL_REDIRECT = True
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
  2. 使用异步任务处理耗时操作

    • 引入 Celery + Redis/RabbitMQ 处理邮件发送、图片处理等后台任务。
    • 避免在视图函数中执行阻塞操作。
  3. 优化 ORM 查询

    • 使用 select_related()prefetch_related() 减少 N+1 查询问题。
    • 对高频查询字段添加数据库索引。
    • 避免在循环中重复查询数据库。
  4. 静态文件与媒体文件分离

    • 使用 collectstatic 收集静态文件。
    • 将静态/媒体文件托管至腾讯云对象存储(COS),通过 CDN 提速访问。
  5. 启用模板缓存

    TEMPLATES[0]['OPTIONS']['loaders'] = [
       ('django.template.loaders.cached.Loader', [
           'django.template.loaders.filesystem.Loader',
           'django.template.loaders.app_directories.Loader',
       ]),
    ]
  6. 关闭不必要的中间件

    • 移除未使用的中间件(如 SessionMiddleware 若无需会话)。

二、Web 服务器层(Gunicorn/Nginx)

1. Gunicorn 调优

gunicorn myproject.wsgi:application 
  --workers 4 
  --worker-class gthread 
  --threads 2 
  --timeout 60 
  --max-requests 1000 
  --max-requests-jitter 50 
  --bind 127.0.0.1:8000
  • workers 数量:建议为 CPU 核数 × 2 + 1(I/O 密集型可更高)。
  • 使用 gevent/gthread:提升并发处理能力。
  • 限制请求数:防止单个 worker 内存泄漏。

推荐使用 systemd 管理 Gunicorn 服务,确保开机自启。

2. Nginx 反向X_X优化

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

        gzip on;
        gzip_types text/plain application/json application/javascript text/css;
        gzip_min_length 1000;
    }

    location /static/ {
        alias /path/to/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /media/ {
        alias /path/to/media/;
        expires 7d;
    }
}
  • 启用 gzip 压缩减少传输体积。
  • 设置合理的超时时间。
  • 静态资源由 Nginx 直接提供,减轻 Django 压力。

三、数据库优化(MySQL/PostgreSQL)

  1. 连接池配置

    • PostgreSQL:调整 max_connectionsshared_buffers
    • MySQL:合理设置 innodb_buffer_pool_size(通常为物理内存的 50%~70%)。
  2. 慢查询日志分析

    • 开启慢查询日志,定位低效 SQL。
    • 使用 EXPLAIN 分析执行计划。
  3. 读写分离(可选)

    • 主库写,从库读(适用于高读场景)。
  4. 定期维护

    • 执行 VACUUM ANALYZE(PostgreSQL)或 OPTIMIZE TABLE(MySQL)。

四、缓存层(Redis/Memcached)

  1. 启用页面级缓存

    from django.core.cache import cache
    
    def my_view(request):
       cached_data = cache.get('my_key')
       if cached_data is None:
           cached_data = expensive_operation()
           cache.set('my_key', cached_data, timeout=300)
       return render(request, 'template.html', {'data': cached_data})
  2. 使用 cache_page 装饰器

    from django.views.decorators.cache import cache_page
    
    @cache_page(60 * 15)  # 缓存 15 分钟
    def my_view(request):
       ...
  3. Redis 作为 session 后端

    CACHES = {
       "default": {
           "BACKEND": "django_redis.cache.RedisCache",
           "LOCATION": "redis://127.0.0.1:6379/1",
           "OPTIONS": {
               "CLIENT_CLASS": "django_redis.client.DefaultClient",
           }
       }
    }
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"

五、操作系统与网络层(Ubuntu 22.04 + 腾讯云)

  1. 内核参数调优
    编辑 /etc/sysctl.conf

    net.core.somaxconn = 65535
    net.ipv4.tcp_max_syn_backlog = 65535
    net.ipv4.ip_local_port_range = 1024 65535
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30

    生效:sudo sysctl -p

  2. 文件描述符限制
    编辑 /etc/security/limits.conf

    * soft nofile 65535
    * hard nofile 65535
    root soft nofile 65535
    root hard nofile 65535
  3. 使用腾讯云专属优化

    • 开启 弹性公网 IP(EIP) 并绑定负载均衡(CLB)实现流量分发。
    • 启用 云监控 观察 CPU、内存、带宽使用情况。
    • 使用 私有网络(VPC) 内网通信降低延迟。
    • 考虑使用 TKE(容器服务) 部署,便于水平扩展。
  4. 防火墙与安全组

    • 仅开放必要端口(80/443/SSH)。
    • 使用 UFW 简化规则管理:
      sudo ufw allow 80/tcp
      sudo ufw allow 443/tcp
      sudo ufw enable

六、监控与持续优化

  • 使用 Prometheus + Grafana 监控指标。
  • 集成 Sentry 捕获异常。
  • 定期运行 django-debug-toolbar 分析视图性能。
  • 使用 abwrk 进行压力测试。

七、进阶建议(按需采用)

场景 建议
高并发 增加 Gunicorn workers + Nginx 负载均衡
大数据量 分表、归档历史数据、使用 Elasticsearch 搜索
全球用户 接入腾讯云 CDN + 多地域部署
微服务架构 拆分 Django 模块为独立服务

通过以上优化,你的 Django 项目在腾讯云 Ubuntu 22.04 服务器上可显著提升响应速度、吞吐量和稳定性。建议根据实际业务负载逐步实施,并通过监控数据验证效果。

未经允许不得转载:CLOUD技术博 » 腾讯云服务器Ubuntu 22.04部署Django项目性能优化建议?