在 Linux 系统中,top 命令是监控系统资源使用情况最常用的工具之一,而 Swap(交换空间) 则是虚拟内存管理的重要组成部分,理解 top 中 Swap 相关的指标,对于排查内存瓶颈、性能问题至关重要。
以下是关于 top 命令中 Swap 部分的详细解读:
如何在 top 中查看 Swap 信息
默认情况下,top 命令会显示内存(Mem)和交换空间(Swap)的使用情况。
直接运行 top
top
在输出头部,你会看到类似这样的行:
MiB Mem : 16384.0 total, 2048.0 free, 8192.0 used, 6144.0 buff/cache MiB Swap: 8192.0 total, 8192.0 free, 0.0 used. 7680.0 avail Mem
按 f 键自定义显示字段
如果某些 Swap 字段未显示,可以按 f 进入字段选择界面,确保以下字段被选中(用 标记):
SWAP或SWAP TOTALSWAP FREESWAP USED
Swap 关键字段详解
在 top 的输出中,Swap 部分通常包含以下四个关键指标:
| 字段 | 含义 | 说明 |
|---|---|---|
| total | 总交换空间大小 | 系统配置的 Swap 分区或 Swap 文件总容量。 |
| free | 空闲交换空间 | 尚未使用的 Swap 空间。 |
| used | 已使用的交换空间 | 当前正在被使用的 Swap 空间大小。这是最关键的性能指标。 |
| avail Mem | 可用物理内存 | 可供新应用程序使用的物理内存(包含可回收的缓存)。 |
⚠️ 注意:
top中显示的avail Mem是物理内存的可用量,不是 Swap 的。
如何解读 Swap 使用情况?
✅ 正常情况
used为 0 或接近 0:系统物理内存充足,无需使用 Swap。used少量存在:系统偶尔将不活跃的数据页换出到 Swap,属于正常行为,有助于释放物理内存供缓存使用。
⚠️ 需要关注
used持续增长:可能意味着物理内存不足,或者应用程序存在内存泄漏。used较高但系统响应正常:可能是历史遗留数据,尚未被回收。
❌ 性能问题(Swap Thrashing / 交换颠簸)
used很高 + 系统响应缓慢 + CPU 等待 I/O 高:- 系统频繁地在物理内存和 Swap 之间交换数据。
- 磁盘 I/O 成为瓶颈,导致系统卡顿。
- 此时应检查是否有进程占用过多内存,或考虑增加物理内存。
常用相关命令与技巧
🔍 查看哪些进程在使用 Swap
top 本身不直接显示每个进程的 Swap 使用量,但你可以:
- 在
top中按P(按内存排序),然后查看%MEM列。 - 使用
ps命令精确查询:# 按 Swap 使用量排序,显示前 10 个进程 ps -eo pid,comm,swap --sort=-swap | head -n 11
- 使用
smem工具(更直观):sudo apt install smem # Debian/Ubuntu sudo yum install smem # CentOS/RHEL smem -t -k -s swap # 按 Swap 排序显示
📊 实时监控 Swap 变化
# 使用 watch 命令每秒刷新 top 的 Swap 信息 watch -n 1 'top -b -n 1 | grep -i swap'
🛠 调整 Swap 使用策略(swappiness)
Linux 内核有一个参数 vm.swappiness,控制系统倾向于使用 Swap 的程度(0~100):
- 0:尽可能少用 Swap,只在物理内存极度不足时才使用。
- 60:默认值,平衡使用。
- 100:积极使用 Swap,类似 Windows 的行为。
查看当前值:
cat /proc/sys/vm/swappiness
临时修改(立即生效):
sudo sysctl vm.swappiness=10
永久修改(写入配置文件):
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
💡 建议:对于数据库服务器(如 MySQL、PostgreSQL),通常建议将
swappiness设置为较低值(如 10 或 0),以避免数据库页面被换出导致性能下降。
常见问题排查步骤
如果怀疑 Swap 导致性能问题,请按以下步骤排查:
- 确认 Swap 使用量:
free -h
- 查看是否有进程大量占用物理内存:
top -o %MEM
- 检查磁盘 I/O 是否瓶颈:
iostat -x 1
关注
%util是否接近 100%,以及await是否很高。 - 检查内核日志是否有 OOM Killer 记录:
dmesg | grep -i "out of memory" journalctl -k | grep -i "oom"
- Swap 不是内存的替代品,而是物理内存不足时的“缓冲垫”。
top中 Swap used 为 0 是理想状态,少量使用是正常的。- 高 Swap 使用 + 高 I/O 等待 = 性能瓶颈,需优化内存或增加物理内存。
- 使用
ps或smem可以更精确地定位占用 Swap 的进程。
如有具体 top 输出截图或系统状态描述,我可以提供更针对性的分析。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/483112.html



