0

0

Linux内存调优经验总结_生产环境实践说明【教程】

舞夢輝影

舞夢輝影

发布时间:2026-01-09 20:42:09

|

298人浏览过

|

来源于php中文网

原创

swappiness=1在生产数据库服务器上成标配,因默认值60会过早换出匿名页引发毫秒级卡顿;设为1仅OOM时启用swap,兼顾安全与性能。

linux内存调优经验总结_生产环境实践说明【教程】

为什么 swappiness=1 在生产数据库服务器上几乎成了标配

因为默认值 swappiness=60 会让内核在物理内存还有大量空闲时就急着把匿名页(如堆内存)换出到 swap,这对延迟敏感的数据库(PostgreSQL、MySQL)是灾难性的——一次 swapin 可能导致几百毫秒的卡顿。设为 1 并非禁用 swap,而是只在真正濒临 OOM 时才启用,既保留了安全垫,又避免了无谓抖动。

实操建议:

  • 临时生效:
    sudo sysctl vm.swappiness=1
  • 永久生效:在 /etc/sysctl.conf 中追加 vm.swappiness=1,再运行 sysctl -p
  • 注意:容器环境(如 Docker)中该参数需在宿主机设置,容器内修改无效
  • 验证是否生效:cat /proc/sys/vm/swappiness,不是看 sysctl vm.swappiness 的输出(可能缓存)

vm.vfs_cache_pressure 调高还是调低?看你的 workload 类型

这个参数控制内核回收 dentry 和 inode 缓存的积极程度。默认值 100 对通用场景合理,但对大量小文件读写的业务(如 Git 仓库服务、CI/CD 构建节点),缓存压力过大会频繁丢弃路径缓存,导致 open()stat() 系统调用变慢。

实操建议:

  • 小文件密集型服务:设为 5080,保留更多 dentry/inode,减少路径查找开销
  • 大文件流式处理(如日志归档、视频转码):可保持默认或略调高至 120,避免缓存长期霸占内存
  • 不要设为 0:内核不会完全不回收,且会引发其他异常行为(如 slabinfo 统计失真)
  • 观察指标:grep -i "dentry\|inode" /proc/meminfo,结合 slabtop -odentryinode_cache 占比

为什么 echo 1 > /proc/sys/vm/drop_caches 在生产环境基本没用

这条命令只能释放 pagecache、dentries 和 inodes,但无法释放 slab 分配器管理的内核对象(如 socket buffers、ext4 inode)、用户态进程堆内存、或被 mlock() 锁住的页。真正吃掉内存的往往是 slab 或应用自身泄漏,清 cache 只是“擦黑板”,不解决根本问题。

Content at Scale
Content at Scale

SEO长内容自动化创作平台

下载

实操建议:

  • 别把它当“内存清理神器”——线上执行后 free -h 显示可用内存上升,不代表系统更健康
  • 若发现 Slab 占用持续增长(cat /proc/meminfo | grep Slab),优先查 slabtop -o 找 top 消耗者,比如 kmalloc-192ext4_inode_cache
  • 确认是否真有内存压力:看 /proc/vmstat 中的 pgmajfault(缺页中断)、pgpgin/pgpgout(IO 换入换出量),比看 free 更可靠
  • 自动触发 drop_caches 的脚本在生产环境属于危险操作,应禁止

Redis / Elasticsearch 这类应用必须配 vm.overcommit_memory=1

这些应用启动时会预分配大量虚拟内存(如 Redis 的 maxmemory + 预留空间),但实际物理页按需分配。默认 overcommit_memory=0(启发式检查)会在进程 malloc() 超过系统剩余内存时直接失败,导致启动报 Cannot allocate memory,哪怕物理内存明明够用。

实操建议:

  • 设为 1 表示“永远允许 overcommit”,依赖 OOM killer 在真正爆内存时介入,这是最稳妥的选择
  • 绝对不要设为 2 并配 vm.overcommit_ratio:该模式下内核按硬公式计算可用内存(Swap + RAM * ratio/100),极易误判,尤其在 swap 关闭时直接归零
  • 配置后需重启对应服务才能生效(因为 malloc() 行为在进程启动时确定)
  • 验证方式:cat /proc/sys/vm/overcommit_memory,同时检查 /proc/sys/vm/overcommit_ratio 是否仍为默认 50(设为 1 时该值无效)

内存调优不是调参比赛,每个改动都要对应到具体 workload 的行为特征。最常被忽略的是:没关掉 transparent hugepage(/sys/kernel/mm/transparent_hugepage/enabled),它在某些 OLTP 场景下反而增加锁竞争和内存碎片。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

658

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

244

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

280

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

528

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

596

2023.08.14

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 785人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号