在腾讯云服务器(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