swap中怎么在生产线高并发数据库集群中配置优雅关闭swap以防触发严重的I/O抖动

冰川箭仙

冰川箭仙

2026-07-24

434人浏览

原创

关闭swap需分步验证与兜底:先确认进程swap占比超5%~10%,再执行swapoff -a并注释fstab;同步绑定cgroups内存硬限、调vm.swappiness=1、设数据库内存淘汰策略及buffer pool上限,最后压测验证majflt趋近于0且无oom日志。

swap中怎么在生产线高并发数据库集群中配置优雅关闭swap以防触发严重的i/o抖动

在生产环境高并发数据库集群中,关闭 Swap 不是“一刀切”的操作,而是一套需验证、分步、带兜底的配置流程。盲目执行 swapoff -a 可能导致 OOM Killer 立即杀掉数据库进程(如 Redis、MySQL、GBase),尤其当 maxmemory 未合理设置或内存工作集接近物理上限时。

先确认 Swap 是否真在影响数据库

别跳过这一步——多数卡顿并非 Swap 导致,而是 AOF rewrite、RDB fork、LFU 衰减、NUMA 内存不均衡或 Page Cache 压力引发。

  • redis-cli info | grep process_idpgrep -f "mysqld|postgres" 拿到主进程 PID
  • 运行 cat /proc/<pid>/status | grep -i swap</pid>,检查 Swap 字段是否 > 0(注意不是 SwapPss)
  • 进一步统计换出比例:
    cat /proc/<pid>/smaps | awk '/^Size:/ {size+=$2} /^Swap:/ {swap+=$2} END {printf "Swap ratio: %.1f%\n", swap/size*100}'</pid>
    若长期高于 5%~10%,才说明存在真实 Swap 压力

安全关闭 Swap 的两步法

仅禁用 Swap 不够,必须同步建立内存硬限与回收缓冲机制,防止内核在无 Swap 时直接触发 OOM。

雀塔AI
雀塔AI

一站式工作流开发服务平台,从开发配置到推广分成,从AI创意到落地变现全搞定。

下载
  • 第一步:临时关闭 + 永久屏蔽
    执行 sudo swapoff -a,同时注释 /etc/fstab 中所有 swap 行(如 # /dev/sdb1 none swap sw 0 0
  • 第二步:绑定 cgroups v2 内存上限
    例如为 MySQL 创建内存约束:
    mkdir -p /sys/fs/cgroup/db-mysql
    echo 12G > /sys/fs/cgroup/db-mysql/memory.max
    echo $(pgrep mysqld) > /sys/fs/cgroup/db-mysql/cgroup.procs
    这样即使 RSS 突增,也不会突破硬限,避免 OOM 杀进程

配套内核与数据库参数调优

关 Swap 后,系统更依赖内存管理策略的合理性,以下参数必须同步调整:

  • vm.swappiness = 1(非 0):文档明确说明 =0 仅“尽可能避免” Swap,但不禁止;=1 才真正抑制匿名页换出,同时保留极小弹性,防 OOM 误判
  • 数据库侧设淘汰策略:Redis 必须配 maxmemory-policy allkeys-lfuvolatile-lru,不能只写 maxmemory;MySQL 需确认 innodb_buffer_pool_size ≤ 物理内存 × 0.7,并开启 innodb_numa_interleave=ON(防 NUMA 引发局部 Swap)
  • 禁用大页前先验证:若启用 vm.nr_hugepages,务必确保应用实际使用(如 PostgreSQL 需 huge_pages = on),否则空占内存反而加剧压力

上线前必做的压测验证

关闭 Swap 后,必须模拟高峰期内存压力,验证两点:

  • free -h 显示可用内存降至 1–2GB 时,数据库是否仍响应正常、无连接超时、无 OOM 日志
  • pidstat -r 1 观察进程 %memminflt/majflt:majflt(主缺页)应趋近于 0,说明无页面换入;若持续 > 50/sec,说明仍有隐性 Swap 活动或内存碎片问题

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

355

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

618

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1216

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

429

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1034

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1850

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

323

5

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习