mysql如何排查虚拟内存swap使用过高问题_调整innodb_flush_method与swappiness
MySQL卡但CPU低时,大概率是SWAP导致:先用vmstat 1查si/so是否持续大于0,再结合free -h确认SwapUsed上涨;需设innodb_flush_method=O_DIRECT、swappiness=1、memlock无限并启用innodb_numa_interlea ve。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
MySQL卡但CPU很低,先看 vmstat 1 里的 si 和 so
遇到MySQL响应慢如蜗牛,而mysqld进程的CPU使用率却只有个位数时,别急着去翻慢查询日志或者怀疑索引和锁。这时候,十有八九是SWAP(虚拟内存交换)在背后捣鬼。典型的症状是,连SELECT 1这样的简单查询都可能超时,连接数不断堆积,慢查询日志里塞满了“Waiting for table flush”的记录。
怎么快速确认?打开终端,运行vmstat 1。关键要看si(swap-in,每秒从磁盘交换到内存的千字节数)和so(swap-out,每秒从内存交换到磁盘的千字节数)这两列。如果它们持续大于0,而不是偶尔跳动,那就基本坐实了内存换入换出是性能毛刺的元凶。再配合free -h命令,观察SwapUsed是否在持续上涨,就能彻底锁定问题。
这里有个常见的误区:看到used内存很高就紧张。其实,内存被使用是正常的。真正的危险信号是a vailable(可用内存)持续低于1GB,同时swpd(已使用的交换区大小)还在不断增长。
innodb_flush_method=O_DIRECT 要配对生效,不能只改一半
很多DBA知道设置innodb_flush_method=O_DIRECT可以让InnoDB数据文件绕过操作系统的页缓存(page cache),从而减少内存竞争。但配置后效果不明显,甚至问题依旧?这很可能是因为只做了一半。
这个参数只作用于InnoDB的数据文件(.ibd文件),而重做日志(redo log)默认仍然会经过OS cache。这就导致InnoDB的缓冲池(buffer pool)和日志缓冲(log buffer)在内存层面形成了“内耗”,尤其是在写入密集的场景下,会加剧页回收(page reclaim)的压力,间接提高了系统触发SWAP的倾向。
要让它真正生效,得确保以下几点:
- 在
my.cnf配置文件的[mysqld]段中,明确写上innodb_flush_method=O_DIRECT。 - 注意不要和
O_DSYNC混用,后者并不绕过缓存,性能通常更差。 - 启用
O_DIRECT后,InnoDB缓冲池会直接占用物理内存,占用会更“实在”。如果之前把innodb_buffer_pool_size设到了物理内存的80%,现在可能需要下调到70%或更低,否则MySQL服务可能无法启动。 - 最后,别忘了验证:启动MySQL后,执行
SHOW VARIABLES LIKE 'innodb_flush_method';,确保输出是O_DIRECT,而不是空值或async_unbuffered。
swappiness=1 是减缓,memlock 才是根治
将/proc/sys/vm/swappiness设置为1(甚至0),是常见的优化建议,但这只是降低了内核主动进行内存交换的“倾向性”。它并不能给MySQL进程穿上“金钟罩”——一旦系统内存严重不足或OOM killer被触发,mysqld进程的页面依然可能被换出到SWAP。
真正能让MySQL进程免疫SWAP的,是内存锁(memlock)。这相当于告诉操作系统:“这部分内存必须常驻物理内存,不许动。”配置步骤如下:
- 编辑
/etc/security/limits.conf文件,为运行MySQL的用户(通常是mysql)添加两行配置:mysql soft memlock unlimited mysql hard memlock unlimited
- 在
my.cnf的[mysqld]段中,增加一行:innodb_use_sys_malloc=0(如果使用了jemalloc等替代的内存分配器,这一步至关重要)。 - 必须确保MySQL是以root用户启动,或者启动用户拥有相应的权限,否则
memlock配置不会生效。使用systemd管理服务时,需检查User=mysql是否与limits.conf中配置的用户一致。 - 配置后如果启动失败,并报错
Cannot allocate memory,首先检查innodb_buffer_pool_size是否设置得过大,超过了物理内存的70%。 - 如果一切配置妥当但问题仍在,可以立即检查进程的能力位:
cat /proc/`pidof mysqld`/status | grep -i "cap",确认输出中包含cap_ipc_lock,这表示内存锁能力已生效。
NUMA 架构下不配 innodb_numa_interlea ve,memlock 可能白开
在多路CPU服务器(尤其是Intel Xeon平台搭配CentOS/RHEL系统)上,还有一个隐藏的“坑”:NUMA(非统一内存访问)架构。如果MySQL启动时没有指定正确的NUMA策略,即使配置了memlock,锁定的内存也可能全部集中在某一个NUMA节点(node)上。这会导致该节点内存迅速耗尽,而其他节点的内存却大量空闲。操作系统感知到“局部内存不足”,依然会将部分内存页换出到SWAP,之前的优化努力就白费了。
解决这个问题很简单:对于MySQL 5.6.27及以上版本,直接在my.cnf中设置innodb_numa_interlea ve=ON即可。对于更老的版本,则需要在启动脚本中,使用numactl --interlea ve=all命令来包裹mysqld_safe启动命令。
可以这样理解:memlock是给汽车装上了防爆胎,而innodb_numa_interlea ve则是确保四个轮胎气压均衡。缺了后者,车子看着配置齐全,一上高速(高负载)就可能出问题。
相关攻略
数据库的构建并非一劳永逸。在实际项目开发和运维过程中,随着业务逻辑的演进或系统平台的迁移,调整数据库的全局配置参数是常见的需求。本文将详细介绍如何对已存在的MySQL数据库进行修改,特别是其默认字符集和校对规则。 基本语法 在MySQL中,若要修改数据库的全局属性,例如其默认字符集或排序规则,需要使
安装必要的库 本次教程将指导您完成MySQL数据库的迁移操作。除了核心的db-migrate工具,我们还需要安装MySQL数据库驱动。请在您的命令行终端中,依次运行以下两条npm安装命令: npm install -g db-migrate npm install db-migrate-mysql
有经验的PHPer应该对PEAR*都不会陌生,不过对新手来说,简单的练习PEAR应该不必派上用场,不过在开始接触复杂的编程时,PEAR对PHPer来说可以说是一个很有效的工具。 到底什么是PEAR?详细的答案都在pear php net上,这里就不多赘述了。不过,有一个工具值得重点介绍,它就是DB—
MySQL 的 ACID 特性不是靠「开启事务」就自动生效的 说到数据库事务的ACID特性,很多人的第一反应是:只要用了BEGIN或START TRANSACTION,原子性、一致性、隔离性、持久性就自动到位了。这其实是一个常见的误解。真相是,在MySQL的世界里,ACID并非一个全局开关,它的实现
MySQL实例角色判断:如何精准识别主库与从库 在MySQL的运维世界里,一个看似简单却至关重要的问题是:你面前的这个实例,究竟是主库还是从库?尤其是在自动化脚本、监控系统或故障切换的场景下,判断失误可能导致灾难性的后果。今天,我们就来拆解几种核心的判别方法,帮你把这事儿彻底搞清楚。 最可靠的判断方
热门专题
热门推荐
2026年4月2日,一场始于订单的“双向奔赴” 汽车圈最近上演了一出颇有温度的品牌互动,起因是一张来自社交平台的购车订单。一位原奥迪车主公开晒出了小米SU7的订单截图,并向相关负责人致以问候。这原本只是一条个人动态,却没承想,引发了一连串超出预期的友好回应。 消息传出后,上汽奥迪的反应堪称迅速且巧妙
特斯拉2026年Q1财报解读:业绩稳健增长,自动驾驶与机器人战略加速落地 2026年第一季度,特斯拉再次向市场展示了其强劲的发展动能。在全球电动汽车市场,特斯拉产量成功突破40 8万辆,实现同比12 7%的稳健增长;同期交付量达到35 8万辆,同比增长6 5%。与此同时,特斯拉储能业务表现突出,总装
四月一日,沙盒游戏我的世界推出一次特别更新,引发广泛关注 话说回来,四月的第一天,经典沙盒游戏《我的世界》,就整了个“大活儿”。一项听起来颇有碘伏性的设计调整,在社区内炸开了锅:游戏直接移除了沿用已久的仓库系统,改为所有物品都能随手放在地面,想用的时候捡起来就行。 仓库功能向来是此类建造型游戏的核心
巨鲸再出手:千万美元级ETH悄然离场 市场总是静水深流。就在今天,链上数据捕捉到一笔值得玩味的动向。根据链上分析师Onchain Lens的监测,大约三小时前,一个地址尾号为“24d4”的巨鲸,从知名交易所Kraken一口气提取了4,472枚ETH。按当前市价估算,这笔资产价值接近一千万美元。 这可
京东京造再推黄金配件新品:磁吸支架以亲民价格亮相 关注京东京造的朋友一定还记得此前推出的黄金手机壳,因其独特设计与高纯度金材质引发了不少讨论。如今品牌再度升级,带来了一款更贴近日常使用的“轻量化”黄金配件——黄金气囊手机磁吸支架,进一步降低了黄金数码配件的入手门槛。 产品解析:含金量与设计亮点 这款





