在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目时,性能优化需要从应用层、Web 服务器层、数据库层、缓存层以及基础设施层多个维度协同进行。以下是系统化的优化建议:
一、应用层优化(Django 本身)
-
启用生产模式配置
# settings.py DEBUG = False ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1'] SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True -
使用异步任务处理耗时操作
- 引入 Celery + Redis/RabbitMQ 处理邮件发送、图片处理等后台任务。
- 避免在视图函数中执行阻塞操作。
-
优化 ORM 查询
- 使用
select_related()和prefetch_related()减少 N+1 查询问题。 - 对高频查询字段添加数据库索引。
- 避免在循环中重复查询数据库。
- 使用
-
静态文件与媒体文件分离
- 使用
collectstatic收集静态文件。 - 将静态/媒体文件托管至腾讯云对象存储(COS),通过 CDN 提速访问。
- 使用
-
启用模板缓存
TEMPLATES[0]['OPTIONS']['loaders'] = [ ('django.template.loaders.cached.Loader', [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ]), ] -
关闭不必要的中间件
- 移除未使用的中间件(如
SessionMiddleware若无需会话)。
- 移除未使用的中间件(如
二、Web 服务器层(Gunicorn/Nginx)
1. Gunicorn 调优
gunicorn myproject.wsgi:application
--workers 4
--worker-class gthread
--threads 2
--timeout 60
--max-requests 1000
--max-requests-jitter 50
--bind 127.0.0.1:8000
- workers 数量:建议为
CPU 核数 × 2 + 1(I/O 密集型可更高)。 - 使用 gevent/gthread:提升并发处理能力。
- 限制请求数:防止单个 worker 内存泄漏。
推荐使用 systemd 管理 Gunicorn 服务,确保开机自启。
2. Nginx 反向X_X优化
server {
listen 80;
server_name your-domain.com;
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;
gzip on;
gzip_types text/plain application/json application/javascript text/css;
gzip_min_length 1000;
}
location /static/ {
alias /path/to/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /path/to/media/;
expires 7d;
}
}
- 启用 gzip 压缩减少传输体积。
- 设置合理的超时时间。
- 静态资源由 Nginx 直接提供,减轻 Django 压力。
三、数据库优化(MySQL/PostgreSQL)
-
连接池配置
- PostgreSQL:调整
max_connections和shared_buffers。 - MySQL:合理设置
innodb_buffer_pool_size(通常为物理内存的 50%~70%)。
- PostgreSQL:调整
-
慢查询日志分析
- 开启慢查询日志,定位低效 SQL。
- 使用
EXPLAIN分析执行计划。
-
读写分离(可选)
- 主库写,从库读(适用于高读场景)。
-
定期维护
- 执行
VACUUM ANALYZE(PostgreSQL)或OPTIMIZE TABLE(MySQL)。
- 执行
四、缓存层(Redis/Memcached)
-
启用页面级缓存
from django.core.cache import cache def my_view(request): cached_data = cache.get('my_key') if cached_data is None: cached_data = expensive_operation() cache.set('my_key', cached_data, timeout=300) return render(request, 'template.html', {'data': cached_data}) -
使用
cache_page装饰器from django.views.decorators.cache import cache_page @cache_page(60 * 15) # 缓存 15 分钟 def my_view(request): ... -
Redis 作为 session 后端
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"
五、操作系统与网络层(Ubuntu 22.04 + 腾讯云)
-
内核参数调优
编辑/etc/sysctl.conf:net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30生效:
sudo sysctl -p -
文件描述符限制
编辑/etc/security/limits.conf:* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535 -
使用腾讯云专属优化
- 开启 弹性公网 IP(EIP) 并绑定负载均衡(CLB)实现流量分发。
- 启用 云监控 观察 CPU、内存、带宽使用情况。
- 使用 私有网络(VPC) 内网通信降低延迟。
- 考虑使用 TKE(容器服务) 部署,便于水平扩展。
-
防火墙与安全组
- 仅开放必要端口(80/443/SSH)。
- 使用 UFW 简化规则管理:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
六、监控与持续优化
- 使用 Prometheus + Grafana 监控指标。
- 集成 Sentry 捕获异常。
- 定期运行
django-debug-toolbar分析视图性能。 - 使用
ab或wrk进行压力测试。
七、进阶建议(按需采用)
| 场景 | 建议 |
|---|---|
| 高并发 | 增加 Gunicorn workers + Nginx 负载均衡 |
| 大数据量 | 分表、归档历史数据、使用 Elasticsearch 搜索 |
| 全球用户 | 接入腾讯云 CDN + 多地域部署 |
| 微服务架构 | 拆分 Django 模块为独立服务 |
通过以上优化,你的 Django 项目在腾讯云 Ubuntu 22.04 服务器上可显著提升响应速度、吞吐量和稳定性。建议根据实际业务负载逐步实施,并通过监控数据验证效果。
CLOUD技术博