速卖通素材
努力

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

服务器

在腾讯云服务器(CVM)上部署 Django 项目时,性能优化需要从操作系统层、Web 服务器层、应用层、数据库层以及网络/CDN 层进行系统性调优。以下是针对 Ubuntu 22.04 + Django 的完整优化建议:


一、操作系统层优化(Ubuntu 22.04)

1. 内核参数调优

编辑 /etc/sysctl.conf,添加或修改以下参数(根据实际负载调整):

# 增加文件描述符限制
fs.file-max = 65535
# TCP 连接优化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
vm.swappiness = 10  # 减少 Swap 使用,提升内存效率

生效命令:

sudo sysctl -p

2. 资源监控与限流

  • 安装 htop, iotop, nethogs 等工具实时监控。
  • 使用 cgroups 限制单个进程资源(如 Gunicorn worker 数量)。

二、Web 服务器层(推荐 Nginx + Gunicorn/uWSGI)

1. 使用 Gunicorn 替代 Django 内置开发服务器

Django 自带的 runserver 仅用于开发,生产环境必须用 WSGI 服务器。

Gunicorn 配置示例(gunicorn.conf.py):

bind = "127.0.0.1:8000"
workers = 4  # 通常为 CPU 核心数 × 2 + 1
worker_class = "sync"  # 或 "gevent", "uvicorn"(异步场景)
timeout = 120
keepalive = 5
max_requests = 1000  # 防止内存泄漏
max_requests_jitter = 50
accesslog = "-"
errorlog = "-"
loglevel = "info"

启动方式:

gunicorn myproject.wsgi:application --config gunicorn.conf.py

✅ 建议:若项目有异步任务(如 Celery),可考虑 uvicorn + daphne 组合。

2. Nginx 反向X_X优化

/etc/nginx/sites-available/myproject

upstream django_backend {
    server 127.0.0.1:8000;
    keepalive 32;
}

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

    # 静态文件直接由 Nginx 提供(关键!)
    location /static/ {
        alias /path/to/project/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # 媒体文件(用户上传)
    location /media/ {
        alias /path/to/project/media/;
        expires 7d;
    }

    # 动态请求转发到 Gunicorn
    location / {
        proxy_pass http://django_backend;
        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;
}

重启 Nginx:

sudo nginx -t && sudo systemctl restart nginx

三、Django 应用层优化

1. 关闭调试模式 & 启用缓存

# settings.py
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1']

# 使用 Redis 作为缓存后端
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

安装依赖:

pip install django-redis redis

2. 数据库查询优化

  • 使用 .select_related().prefetch_related() 减少 N+1 查询。
  • 为常用查询字段添加索引(PostgreSQL/MySQL)。
  • 避免在视图中执行复杂计算,改用信号或后台任务(Celery)。

3. 静态文件收集

python manage.py collectstatic --noinput

确保 STATIC_ROOT 已正确设置,并由 Nginx 托管。

4. 异步任务处理(Celery + Redis/RabbitMQ)

将耗时操作(邮件发送、图片处理等)移至后台:

pip install celery redis
celery -A myproject worker -l info

四、数据库层优化(以 PostgreSQL 为例)

1. 调整 postgresql.conf

shared_buffers = 25% of RAM
effective_cache_size = 50% of RAM
work_mem = 4MB
maintenance_work_mem = 64MB
max_connections = 100

⚠️ 注意:总内存需预留足够给 OS 和其他服务。

2. 启用连接池(PgBouncer)

在高并发场景下,使用 PgBouncer 管理数据库连接,避免频繁创建/销毁连接。


五、腾讯云特有优化

1. 安全组配置

  • 仅开放必要端口(80/443 for HTTP/HTTPS,SSH 仅限特定 IP)。
  • 禁用不必要的服务端口。

2. 使用云监控与自动伸缩

  • 开启 CloudMonitor 监控 CPU、内存、磁盘 IO。
  • 若流量波动大,可结合 弹性伸缩(Auto Scaling) 动态扩容实例。

3. CDN 提速静态资源

  • /static//media/ 接入 腾讯云 CDN
  • 配置域名 CNAME,并开启 HTTPS。

4. 对象存储(COS)替代本地上传

  • 将用户上传图片/视频存入 腾讯云 COS
  • 通过预签名 URL 或 CDN 分发,减轻服务器带宽压力。

六、其他实用建议

类别 建议
日志管理 使用 systemd-journald + logrotate 轮转日志,避免磁盘爆满
SSL 证书 使用 Let’s Encrypt(certbot)免费 HTTPS
健康检查 在 Nginx 中配置 /healthz 端点,供负载均衡器探测
备份策略 定期备份数据库(mysqldump/pg_dump)至 COS
容器化部署 考虑 Docker + Docker Compose 简化运维(适合多服务架构)

七、性能测试与基准验证

使用工具进行压测:

# ab (Apache Benchmark)
ab -n 10000 -c 100 http://your-domain.com/

# wrk(更现代)
wrk -t4 -c400 -d30s http://your-domain.com/

观察响应时间、QPS、错误率,针对性优化瓶颈。


总结清单 ✅

  • [ ] 关闭 DEBUG,设置 ALLOWED_HOSTS
  • [ ] 使用 Gunicorn + Nginx 反向X_X
  • [ ] 静态/媒体文件交由 Nginx 或 CDN 托管
  • [ ] 启用 Redis 缓存
  • [ ] 优化数据库查询与索引
  • [ ] 异步任务走 Celery
  • [ ] 调整系统内核参数
  • [ ] 配置 SSL 证书
  • [ ] 接入腾讯云 CDN/COS
  • [ ] 建立监控与告警机制

如需进一步定制方案(如高可用集群、K8s 部署、微服务拆分),可提供具体业务场景,我可给出进阶架构建议。

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