swap 占用高说明什么
swap 是磁盘上的交换空间,内核会把长期不访问的内存页换出到那里。swap 用掉一部分本身不是故障:关键看是否还在频繁换入换出(vmstat 的 si/so 两列)。si/so 接近 0 而 swap 占用高,通常只是冷内存沉淀;si/so 持续非零并伴随应用变慢,才是内存不足的信号。
基本信息
| 观察命令 | free -h、vmstat 1 5、swapon --show |
|---|---|
| 关键指标 | si/so(换入换出速率)、SwapCached |
| 内核参数 | vm.swappiness 控制主动换出倾向,各发行版默认值不同 |
| 风险操作 | 内存紧张时 swapoff 会把换出页全部拉回物理内存 |
| 权限要求 | 观察普通用户;调参数需 root |
典型使用场景
- 监控告警提示 swap 使用率超阈值,需要判断是否真故障
- 应用响应变慢,怀疑与内存压力相关
- 评估是否需要扩容内存或调整 swappiness
- 排查 OOM 之前是否存在长时间内存压力
- 虚拟机上核对 swap 配置是否符合基线要求
观察与判断
观察与判断
free -h # 内存与 swap 的总量、已用量
swapon --show # swap 设备、大小与优先级
vmstat 1 5 # si/so 持续非零表示存在实际换页
grep -E 'SwapTotal|SwapFree|SwapCached' /proc/meminfo # 内核视角的细项
sysctl vm.swappiness # 当前换出倾向
ps -eo pid,rss,comm --sort=-rss | head # 占用物理内存最大的进程
dmesg -T | grep -iE 'oom|out of memory' | tail # 是否已发生过 OOM
# 谨慎使用:swapoff -a 会把换出页拉回内存,内存紧张时可能触发 OOM指标逐项读法
| 指标 | 含义 | 判读结论 |
|---|---|---|
| SwapUsed 高、si/so 接近 0 | 冷页沉降到交换空间 | 一般不需要处理 |
| si/so 持续非零 | 内存压力真实存在 | 结合应用延迟判断是否扩容 |
| SwapCached 较高 | 换出的页又被换回并保留缓存 | 说明这些页仍被频繁访问,值得关注 |
| dmesg 出现 OOM | 内存已耗尽并杀进程 | 优先扩容或收紧应用内存参数 |
降低 vm.swappiness 只是减少内核主动换出的倾向,并不能凭空增加内存:内存真的不够时换页依然会发生,只是被延后。
内存已经紧张时执行 swapoff -a 会把换出的页面全部拉回物理内存,可能直接触发 OOM 杀进程;确有必要时安排在维护窗口内操作。