Django + uWSGI 内存占用的 专项方案
off999 2025-03-25 16:17 29 浏览 0 评论
一、SQLite 数据库层优化
1.启用 Write-Ahead Logging (WAL) 模式
在 settings.py 中添加以下配置,提升并发读取性能并减少锁冲突:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
'OPTIONS': {
'timeout': 30, # 超时时间设为30秒
# 启用 WAL 模式,允许多进程读、单进程写
'init_command': 'PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;',
}
}
}效果:减少数据库锁争用,提升多进程场景下的稳定性。
2. 定期执行 VACUUM 清理碎片
# 在 Django 中创建定时任务(如使用 django-crontab)
from django.db import connection
def vacuum_sqlite():
with connection.cursor() as cursor:
cursor.execute("VACUUM;")或通过命令行手动执行:
sqlite3 db.sqlite3 "VACUUM;"3. 禁用非必要数据库特性
在 settings.py 中关闭 Session 表(若未使用 Django 自带 Session):
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 改用缓存存储 Session二、uWSGI 配置优化(适配 SQLite)
1. 强制单进程模式(避免 SQLite 写冲突)
[uwsgi]
processes = 1 # SQLite 写操作不支持多进程,必须设为 1
threads = 2 # 单进程多线程模式(2线程适配2核CPU)
lazy-apps = true # 延迟加载减少内存占用
max-requests = 1000 # 处理 1000 次请求后重启
reload-on-rss = 200 # 进程内存超 200MB 自动重启2. 关闭统计和冗余日志
# 禁用统计服务(减少内存驻留模块)
stats = :9191
# 关闭请求日志(仅保留错误日志)
disable-logging = true三、Django 层优化
1. 精简中间件与 APP
# settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
]
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'yourapp', # 仅保留必需的核心应用
]2. 缓存模板加载
TEMPLATES = [{
'OPTIONS': {
'loaders': [(
'django.template.loaders.cached.Loader', [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]
)],
}
}]四、Nginx 补充优化
1. 静态文件强缓存与压缩
location /static {
alias /var/www/bayke-shop/static/;
expires 365d;
access_log off;
add_header Cache-Control "public, immutable";
gzip on;
gzip_types text/css application/javascript;
}2. 限制客户端超时
location / {
uwsgi_pass 0.0.0.0:8092;
uwsgi_read_timeout 60; # 缩短超时释放资源
uwsgi_send_timeout 60;
}五、系统级调优
1. 强制启用 Swap(防 OOM)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile2. 内核参数调优
# 提升单进程文件描述符上限
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf六、监控与维护
1. 实时内存监控
watch -n 5 "free -h && ps aux --sort=-%mem | grep uwsgi"2. SQLite 状态检查
sqlite3 db.sqlite3 "PRAGMA integrity_check;"七、最终预期效果
指标 | 优化前 | 优化后 |
内存占用 | ~500-600MB | ~200-300MB |
数据库并发能力 | 低(锁冲突频繁) | 中等(WAL 模式) |
请求响应时间 | 200-500ms | 100-200ms |
八、风险提示
- 单进程瓶颈:SQLite 强制单进程,并发超过 50 QPS 时需考虑迁移至 PostgreSQL/MySQL。
- 数据安全:WAL 模式牺牲部分持久性(synchronous=NORMAL),若需强一致性可设为 FULL。
通过以上优化,2 核 4G 服务器可稳定运行中小型 Django 应用。若后续流量增长,建议优先迁移至更强大的数据库(如 PostgreSQL)。
以上是我2核4G服务器的内存优化方案
相关推荐
- 手机上不了wifi是什么原因(手机上不了网连不了wifi)
-
1.手机wifi已连接不可上网问题出现后首先检测一下是否为手机本身突发性的问题,可以进行关机重启一下再连接看是否还会出现这样的情况。或者使用其他手机或设备连接WiFi试试能否上网。2.如果不是手机的问...
- win10有产品id没有密钥(win10 我没有产品密钥)
-
WIN10,在左下角输入WINDOWSPOWERSHELL,然后点击系统查询结果第一项,在弹出的窗口中输入:(Get-WmiObject-query‘select*fromSoftware...
- win10截屏后找不到了(win10截屏后找不到了怎么办)
-
Win10系统截屏后没有更新通知并不是一个常见的问题。可能是由于系统设置或者安装的软件造成的。如果系统设置为静音或者禁用通知,那么截屏后不会有通知。另外,一些截屏软件可能会阻止系统通知,需要手动设置...
- 运行定时关机命令(运行定时关机命令怎么设置)
-
1、打开电脑,按住【Win+R】组合键,弹出运行命令,在编辑框内输入如下命令:shutdown-s-t3600;电脑定时关机运行2、shutdown-s-t3600命令的含义如下:shut...
- 键盘快捷键(键盘快捷键是哪个)
-
电脑键盘快捷键大全:Ctrl+1,2,3... 功能:切换到从左边数起第1,2,3...个标签Ctrl+A 功能:全部选中当前页面内容Ctrl+C 功能:复制当前选中内容Ctrl+D 功能:打开“添加...
- 宏基acer官网商城(宏基官方商城)
-
宏碁本本底部有个序列号标签,不是粉色的那个,粉色的是系统的序列号,白色的是本本的出厂序列号,上宏碁官网查查你的序列号就知道真假了。在盖子的后面就可以查询到序列号,或者是去网上查询宏碁笔记本在官网下...
- 网盘在哪里打开(华为网盘在哪里打开)
-
给你的是一个网盘地址吧,直接把这个地址放到浏览器地址栏就好了,如果有提取码,他会提示你输入提取码的。一般都是在网上找到百度云链接,然后把文件保存在自己的百度网盘文件夹里面的。打开百度网盘app,...
- win7sp1专业版(win7专业版vl)
-
Win7系统SP1是系统发布后第一个SP包x64是64位操作系统。Windows7指的是微软公司的Windows7操作系统ultimate指的是旗舰版(with表示伴随,说明这是提供商所提供...
- 手写输入法手写板怎么设置(手写输入法手写板怎么设置 iphone)
-
手写输入法设置方法:1、打开手机至桌面主页,保持手机处于工作状态; 2、在手机桌面主页列表找到设置,点击打开并进入设置主界面; 3、在设置主界面找到系统设置选项,点击打开并进入系统设置主界面; ...
-
- 推荐杀毒软件(下载杀毒软件最新版)
-
好的杀毒软件有360杀毒,金山毒霸,AVG杀毒等等。1,360杀毒,品牌介绍:360安全卫士品牌是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐...
-
2025-11-12 08:51 off999
- 百度云盘官网(百度云盘官网下载)
-
网盘在手机上面仅仅是一个图标,他是不占用手机硬盘的,当然,如果你从网盘上下载了文件到本地,下载的文件就会占用手机的硬盘空间。要找到这个文件,可以通过文件管理器来进行查找,也可以通过路径的方式来查找,但...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
