在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目时,性能优化需要从应用层、Web 服务器层、数据库层、缓存层以及基础设施层进行系统性调优。以下是针对该环境的详细优化建议:
一、应用层优化(Django 代码与配置)
-
启用生产模式
- 确保
DEBUG = False,关闭调试模式可显著提升响应速度并避免敏感信息泄露。 - 设置
ALLOWED_HOSTS为合法域名/IP。
- 确保
-
使用异步视图(如适用)
- 对于 I/O 密集型任务(如调用外部 API),使用
async def视图 +django-async-view或uvicorn作为 ASGI 服务器。
- 对于 I/O 密集型任务(如调用外部 API),使用
-
减少数据库查询次数
- 使用
select_related()(外键关联)和prefetch_related()(多对多/反向查询)避免 N+1 查询问题。 - 利用
only()/defer()限制返回字段,减少数据加载量。
- 使用
-
静态文件与媒体文件处理
- 不要由 Django 直接提供静态文件(
STATIC_URL指向/static/时)。 - 将静态文件收集到
collectstatic后,交由 Nginx 或 CDN 托管。 - 媒体文件(用户上传)同样应通过对象存储(如腾讯云 COS)+ CDN 提速。
- 不要由 Django 直接提供静态文件(
-
Gzip 压缩
- 在 Nginx 中开启 Gzip 压缩(见下文),减少网络传输体积。
-
禁用不必要的中间件
- 检查
MIDDLEWARE列表,移除未使用的中间件(如SessionMiddleware若无需会话则可选配无状态 JWT)。
- 检查
二、Web 服务器层优化(Nginx + Gunicorn/uWSGI)
推荐架构:Nginx(反向X_X + 静态文件服务) → Gunicorn(ASGI/WSGI 应用服务器)
1. Nginx 优化配置示例(/etc/nginx/sites-available/django)
server {
listen 80;
server_name your-domain.com;
# 静态文件服务(关键!)
location /static/ {
alias /path/to/your/project/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
gzip on;
gzip_types text/plain application/json application/javascript text/css image/svg+xml;
}
# 媒体文件(若本地存储)
location /media/ {
alias /path/to/your/project/media/;
expires 7d;
}
# 反向X_X至 Gunicorn
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;
}
# 安全头
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
}
2. Gunicorn 启动参数优化
gunicorn myproject.wsgi:application
--bind 127.0.0.1:8000
--workers 4
--worker-class gthread
--threads 2
--timeout 120
--keep-alive 5
--access-logfile -
--error-logfile -
--workers:通常为CPU 核心数 × 2 + 1(I/O 密集型可更高;计算密集型取 CPU 核数)。--worker-class gthread:适合混合负载场景。--keep-alive:保持 TCP 连接复用,减少握手开销。
✅ 提示:使用 systemd 管理 Gunicorn 进程,实现开机自启和故障恢复。
三、数据库层优化(PostgreSQL/MySQL)
假设使用 PostgreSQL(Django 默认推荐):
-
索引优化
- 对高频查询字段(如
user_id,created_at,status)添加索引。 - 使用
EXPLAIN ANALYZE分析慢查询。
- 对高频查询字段(如
-
连接池配置
- Django ORM 默认连接池较小,可在
DATABASES中设置:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'db_name', 'USER': 'db_user', 'PASSWORD': 'db_pass', 'HOST': 'localhost', 'PORT': '5432', 'CONN_MAX_AGE': 600, # 长连接 'OPTIONS': { 'connect_timeout': 10, }, } }
- Django ORM 默认连接池较小,可在
-
PostgreSQL 参数调优(需修改
postgresql.conf)shared_buffers = 25% of RAM effective_cache_size = 75% of RAM work_mem = 4MB (或根据并发调整) maintenance_work_mem = 16MB max_connections = 100 # 根据内存和 Gunicorn worker 数合理设置 -
定期维护
- 执行
VACUUM ANALYZE清理死元组并更新统计信息。 - 使用
pg_repack在线重建大表索引(避免锁表)。
- 执行
四、缓存层优化(Redis/Memcached)
-
安装 Redis
sudo apt update && sudo apt install redis-server -
Django 缓存配置
CACHES = { "default": { "BACKEND": "django.core.cache.backends.redis.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "client_class": "django_redis.client.DefaultClient", "password": None, "socket_timeout": 1, "retry_on_timeout": True, }, } } -
常用缓存策略
- 页面片段缓存:
@cache_page(60 * 15) - 模板 fragment 缓存:
{% load cache %}{% cache 300 sidebar user %}...{% endcache %} - 查询结果缓存:手动
cache.set('key', value, timeout)
- 页面片段缓存:
💡 注意:缓存键设计要唯一且防碰撞,避免脏读。
五、基础设施与运维优化(腾讯云特有)
-
选择合适实例规格
- 根据流量预估选择:入门型(2C4G)、标准型(4C8G)、高IO型(带 NVMe SSD)。
- 启用弹性公网 IP(EIP) + 负载均衡(CLB) 应对突发流量。
-
开启系统级优化
- 调整内核参数(
/etc/sysctl.conf):net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_tw_reuse = 1 vm.swappiness = 10执行
sudo sysctl -p生效。
- 调整内核参数(
-
使用腾讯云专属服务
- 对象存储 COS:替代本地
/media/目录,配合 CDN 提速全球访问。 - 云数据库 TDSQL / RDS:比自建 MySQL/PG 更稳定,支持自动备份、主从切换。
- 云监控 + 日志审计:实时监控 CPU、内存、磁盘 IO、网络带宽。
- 对象存储 COS:替代本地
-
Docker 容器化部署(可选进阶)
- 使用 Docker Compose 编排 Nginx + Gunicorn + Redis + DB。
- 便于扩缩容、灰度发布、环境一致性。
六、性能测试与监控工具
| 工具 | 用途 |
|---|---|
ab / wrk |
压力测试 |
django-debug-toolbar |
开发阶段 SQL/请求耗时分析 |
Prometheus + Grafana |
实时监控指标 |
New Relic / Sentry |
APM 与错误追踪 |
htop / iotop |
实时资源占用排查 |
七、快速检查清单 ✅
- [ ]
DEBUG = False - [ ] 静态文件由 Nginx 托管
- [ ] Gunicorn 工作进程数合理
- [ ] 数据库有索引 & 长连接
- [ ] Redis 缓存已接入
- [ ] Nginx 开启 Gzip
- [ ] 使用腾讯云 COS + CDN
- [ ] 系统内核参数优化
- [ ] 配置了日志轮转(logrotate)
通过以上分层优化,你的 Django 项目在 Ubuntu 22.04 + 腾讯云上通常可达到 QPS 提升 3~10 倍、首屏延迟降低 50%+ 的效果。建议先在小流量环境验证各项改动,再逐步上线。
如需具体某一步骤的详细命令或配置文件模板,欢迎继续提问!
云服务器