在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目时,性能优化需要从应用层、Web 服务器层、数据库层、缓存层以及基础设施层多个维度入手。以下是系统化的优化建议:
一、Django 应用层优化
1. 使用生产模式运行
确保 DEBUG = False,并设置 ALLOWED_HOSTS 为实际域名/IP。
# settings.py
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-ip']
2. 静态文件与媒体文件处理
- 不要由 Django 服务静态文件,应交由 Nginx 或 CDN 托管。
- 使用
collectstatic收集所有静态文件到STATIC_ROOT。 - 启用压缩和版本化(如
ManifestStaticFilesStorage)。 - 媒体文件可考虑接入腾讯云对象存储(COS)+ CDN。
3. 数据库查询优化
- 使用
.select_related()和.prefetch_related()减少 N+1 查询问题。 - 对常用字段添加数据库索引(尤其外键、过滤/排序字段)。
- 避免在视图中执行复杂循环查询,改用聚合或子查询。
- 定期使用
django-debug-toolbar或silk分析慢查询。
4. 异步任务处理
将耗时操作(邮件发送、图片处理、数据导入等)移出请求线程:
- 使用 Celery + Redis/RabbitMQ 实现异步任务队列。
- 或使用 Django Channels 处理 WebSocket 实时通信。
5. 模板与视图优化
- 开启模板缓存(默认已启用,但需确认
TEMPLATES['OPTIONS']['loaders']未禁用)。 - 避免在模板中执行复杂逻辑,尽量在视图层预处理数据。
- 使用
{% load static %}而非硬编码路径。
二、Web 服务器层优化(推荐 Nginx + Gunicorn/uWSGI)
1. 使用 Gunicorn(生产级 WSGI 服务器)
pip install gunicorn
启动示例:
gunicorn your_project.wsgi:application
--workers 4
--worker-class gthread
--threads 2
--timeout 60
--bind 127.0.0.1:8000
--workers:根据 CPU 核心数设置(通常2×CPU + 1)。--threads:适合 I/O 密集型任务(如 DB 查询、网络请求)。- 监听本地端口,由 Nginx 反向X_X。
2. 配置 Nginx 反向X_X与静态服务
server {
listen 80;
server_name your-domain.com;
location /static/ {
alias /path/to/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /path/to/media/;
expires 7d;
}
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_read_timeout 60s;
}
}
- 启用 gzip 压缩(在
http {}块中配置)。 - 开启 HTTP/2 提升并发性能。
- 限制连接数和速率(可选):
limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10;
三、数据库优化(以 MySQL/PostgreSQL 为例)
1. 连接池管理
- 若使用 PostgreSQL,启用
psycopg2的connpool或使用django-db-connection-pool。 - 调整 Django 的
CONN_MAX_AGE(默认 0,设为 30~60 秒复用连接)。
2. 数据库参数调优(根据腾讯云 RDS 规格)
- 增加
shared_buffers、work_mem、effective_cache_size。 - 启用查询缓存(MySQL 慎用,PG 无传统缓存但可依赖计划缓存)。
- 定期执行
VACUUM ANALYZE(PostgreSQL)或OPTIMIZE TABLE(MySQL)。
3. 读写分离(高级)
- 主库写,从库读(适用于高读场景),通过 Django 多数据库配置实现。
四、缓存层优化
1. 使用 Redis 作为缓存后端
# settings.py
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {"password": "your_redis_pwd"}
}
}
- 安装 Redis:
sudo apt install redis-server - 启动并设置持久化(AOF/RDB)。
- 对热点数据(用户信息、配置、列表页)做缓存,设置合理 TTL。
2. 页面级缓存
- 使用
@cache_page(timeout)装饰器缓存整个视图。 - 结合 Vary 头避免缓存错误内容。
五、操作系统与内核调优(Ubuntu 22.04)
1. 调整文件描述符限制
编辑 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
并在 systemd 服务文件中添加:
[Service]
LimitNOFILE=65535
2. 网络参数优化
编辑 /etc/sysctl.conf:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
生效:sudo sysctl -p
3. 关闭不必要服务
sudo systemctl disable --now snapd # 若非必须
sudo systemctl stop unattended-upgrades # 手动更新更安全
六、监控与持续优化
- 安装 Prometheus + Grafana 监控 CPU、内存、QPS、延迟。
- 使用 New Relic / Sentry 追踪异常与性能瓶颈。
- 定期分析日志(Nginx access.log + error.log + Django logs)。
- 利用腾讯云 云监控(CloudMonitor) 查看实例资源使用情况。
七、额外建议(腾讯云生态集成)
- 负载均衡(CLB):多台服务器前加 CLB 实现横向扩展。
- 自动伸缩(ASG):根据负载自动增减实例。
- CDN 提速:静态资源走腾讯云 CDN,降低源站压力。
- 安全组规则:仅开放必要端口(80/443/SSH),禁止公网直接访问数据库/Redis。
快速检查清单 ✅
| 类别 | 是否完成 |
|---|---|
| DEBUG=False | ☐ |
| collectstatic 并配置 Nginx 托管静态文件 | ☐ |
| Gunicorn + Nginx 反向X_X | ☐ |
| Redis 缓存配置 | ☐ |
| 数据库索引与查询优化 | ☐ |
| 异步任务(Celery)处理耗时操作 | ☐ |
| 系统文件描述符与网络参数调优 | ☐ |
| 启用 HTTPS(Let’s Encrypt 或腾讯云证书) | ☐ |
| 监控告警体系建立 | ☐ |
通过以上措施,你的 Django 项目在腾讯云 Ubuntu 22.04 上的响应速度、并发能力和稳定性将显著提升。如需针对具体场景(如高并发 API、大文件上传、实时聊天等)进一步细化方案,欢迎提供更多信息!
CLOUD云枢