在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目,性能优化需要从应用层、Web 服务器层、数据库层、缓存层、网络与系统层以及腾讯云特有资源六个维度协同进行。以下是经过实战验证的优化建议:
一、Django 应用层优化
1. 启用生产模式
确保 settings.py 中设置:
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-internal-ip']
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'
2. 使用异步 WSGI/ASGI 服务器
避免使用 runserver,推荐:
- Gunicorn(同步模型,适合 CPU 密集型或简单 I/O)
pip install gunicorn gunicorn myproject.wsgi:application --workers 4 --worker-class sync --timeout 120 --bind 127.0.0.1:8000 - Uvicorn + Daphne(异步模型,适合高并发 WebSocket 或 async views)
pip install uvicorn daphne daphne -b 127.0.0.1 -p 8000 myproject.asgi:application
✅ 建议:根据业务类型选择 worker 数量(CPU 核数 × 2~4),并通过
--max-requests防止内存泄漏。
3. 静态文件与媒体文件分离
- 使用
whitenoise(轻量级,适合小流量)或配置 Nginx 直接托管:# settings.py STATIC_ROOT = BASE_DIR / 'staticfiles' STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage' - 执行
collectstatic并压缩:python manage.py collectstatic --noinput
4. 数据库查询优化
- 使用
.select_related()(JOIN 一次表)和.prefetch_related()(多对多/反向关系)减少 N+1 问题。 - 为常用查询字段添加索引:
class MyModel(models.Model): name = models.CharField(max_length=100, db_index=True) created_at = models.DateTimeField(auto_now_add=True) class Meta: indexes = [models.Index(fields=['name', 'created_at'])] - 定期分析慢查询:启用
django-debug-toolbar或查看 MySQL/PostgreSQL 的slow_query_log。
二、Web 服务器层(Nginx)
1. 安装并配置 Nginx
sudo apt update && sudo apt install nginx
2. 关键优化配置(/etc/nginx/sites-available/myproject)
upstream django {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name your-domain.com;
location /static/ {
alias /path/to/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /path/to/media/;
expires 7d;
}
location / {
proxy_pass http://django;
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;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
# Gzip 压缩
gzip on;
gzip_types text/plain application/json application/javascript text/css image/svg+xml;
gzip_min_length 1000;
}
3. 启用 HTTP/2 与 SSL(强烈推荐)
使用 Let’s Encrypt 免费证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
三、数据库优化(以 PostgreSQL 为例)
1. 调整 postgresql.conf
shared_buffers = 25% of RAM (e.g., 1GB if 4GB RAM)
effective_cache_size = 75% of RAM
work_mem = 4MB
maintenance_work_mem = 64MB
max_connections = 100 # 根据负载调整
checkpoint_completion_target = 0.9
wal_buffers = 64MB
2. 启用连接池
使用 PgBouncer 作为中间件:
sudo apt install pgbouncer
# 配置 pgbouncer.ini:
[pgbouncer]
listen_port = 6432
auth_type = md5
userlist_file = userlist.txt
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb
Django 连接字符串改为:postgres://user:pass@localhost:6432/mydb
3. 定期维护
- 开启
autovacuum并调优参数。 - 每周运行
VACUUM ANALYZE。
四、缓存层引入(Redis)
1. 安装 Redis
sudo apt install redis-server
sudo systemctl enable redis-server
2. Django 配置缓存
# settings.py
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"
CACHE_MIDDLEWARE_ALIAS = "default"
CACHE_MIDDLEWARE_SECONDS = 300
3. 使用装饰器缓存视图
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
五、系统级与网络优化(Ubuntu 22.04)
1. 内核参数调优
编辑 /etc/sysctl.conf:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
fs.file-max = 2097152
生效:sudo sysctl -p
2. 文件描述符限制
编辑 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
重启后生效。
3. 使用 Systemd 管理服务
创建 /etc/systemd/system/gunicorn.service:
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/myproject
ExecStart=/home/ubuntu/venv/bin/gunicorn
--workers 4
--worker-class sync
--timeout 120
--bind unix:/var/run/gunicorn.sock
myproject.wsgi:application
Restart=always
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
启动:
sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
六、腾讯云专属优化
1. 安全组规则
仅开放必要端口(如 80/443),关闭 SSH 公网访问(改用堡垒机或内网)。
2. 负载均衡(CLB)
若流量较大,使用 腾讯云 CLB 做四层/七层负载均衡,配合后端 CVM 集群。
3. CDN 提速
将静态资源(JS/CSS/图片)接入 腾讯云 CDN,降低源站压力。
4. 监控告警
- 使用 云监控 监控 CPU、内存、磁盘 IO、网络带宽。
- 设置阈值告警(如 CPU > 80% 持续 5 分钟)。
5. 自动伸缩(可选)
结合 弹性伸缩(AS) 实现基于负载的自动扩缩容。
七、性能测试与持续优化
- 使用 Locust 或 JMeter 进行压测。
- 用 py-spy 分析 Python 进程热点。
- 定期 review 日志(
/var/log/nginx/error.log,gunicorn.log)。
总结检查清单
| 层级 | 是否完成 |
|---|---|
| DEBUG=False + ALLOWED_HOSTS | ✅ |
| Gunicorn/Uvicorn + Worker 合理 | ✅ |
| Nginx X_X + Gzip + HTTPS | ✅ |
| 静态文件走 Nginx/CDN | ✅ |
| Redis 缓存启用 | ✅ |
| DB 索引 + 查询优化 + PgBouncer | ✅ |
| Systemd 管理服务 + 内核参数 | ✅ |
| 腾讯云 CLB/CDN/监控集成 | ✅ |
通过以上组合策略,通常可将 Django 项目在腾讯云 Ubuntu 22.04 上的 QPS 提升 5~20 倍,响应时间降低 60% 以上。如需针对具体业务场景(如电商、SaaS、实时数据)进一步定制,可提供更多细节继续深入探讨。
CLOUD云计算