首页/系统/Linux 运维命令速查/场景:内存不足与 swap 抖动定位
性能与监控48 条

场景:内存不足与 swap 抖动定位

系统卡顿+swap 活动高:判断是真内存不足、缓存策略问题还是泄漏;处理顺序是先保命再根治。

Linux 运维命令速查系统更新于 2026-10-13

这个场景要解决什么

系统卡顿同时伴随换页活动,就要判断是真内存不足、缓存策略问题,还是应用存在泄漏。处理顺序是先保命再根治:先让服务恢复可用,再去找消耗大户与增长趋势。判断的核心指标是可用内存与换入换出量,而不是被缓存占满的那一列。

基本信息

适用场景内存压力大,swap 出现明显换入换出
目标定位消耗源并恢复可用性
工具链free、vmstat、ps、smem、slabtop、cgroup 统计
判读要点看 available 与 swap 活动,不只看 free 那一列

典型使用场景

  • 服务突然变慢并伴随磁盘响动,怀疑正在换页
  • 容器被限制内存后频繁重启
  • 需要确认是文件缓存还是真实使用量在增长
  • 排查内核对象占用异常偏高
  • 评估该加内存还是该调整应用参数

第 1 步 总体

第 1 步 总体
free -h
vmstat 1 5 | tail -n +2    # 重点看 si 与 so
head /proc/meminfo

第 2 步 找大户

第 2 步 找大户
ps aux --sort=-rss | head -n 15
pidstat -r 1 3 | head
smem -rk 2>/dev/null | head -n 15 || echo 'smem 未安装,用 ps 替代'

第 3 步 内核与缓存

第 3 步 内核与缓存
grep -E 'Slab|SReclaimable|SUnreclaim' /proc/meminfo
slabtop -s c -o | head

第 4 步 处置与防复发

第 4 步 处置与防复发
# 先留证据:把 ps 与 vmstat 快照存档,再决定重启或扩容
# 防复发:在单元里设内存上限,或调整应用堆参数
# 排查泄漏:按固定间隔记录常驻内存,看是否单调上升

指标口径

指标含义怎么判
free 列完全空闲的内存数值偏小本身不是问题
available 列估算可再分配给新应用的内存判断压力要看这一列
buff/cache页缓存与缓冲可回收,不等于被占用
si / so每秒换入换出量持续非零说明真在用 swap
Slab内核对象占用持续增长要查是哪个子系统
只看 free 列就重启服务,会丢掉现场证据。重启前先保存进程内存快照与采样数据,否则同样的故障还会再来一次。
清理页缓存会造成短时 IO 抖动,而且治标不治本。除非在做基准测试,否则不要把它当作日常运维手段。

易错点

  • 内核缓存与页缓存占满是设计行为,真正该看的是可用内存与 swap 活动
  • 只看一次快照就下结论,增长趋势要靠多次采样才能看出来
  • 重启服务前不留证据,事后根因无从查起
  • 容器里还要看 cgroup 的内存限制,宿主机内存充足但配额已满同样会触发异常
  • 交换分区被撑满后系统会明显卡顿,先临时扩大交换或限制大户争取时间

数据来源与参考

  • man 5 proc(meminfo/sysctl/vm)
  • man 1 ps(procps-ng)
  • 内核文档 mm

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌