free -h可直接查看Swap当前状态:第三行Swap的Total为总容量,Used为内核实际调用的交换页量,Free为剩余空闲量;Used>0不意味内存不足,需结合vmstat中si/so是否为0判断是否真正在运行。

怎么用 free -h 看清 Swap 当前状态
free -h 是最直接、最可靠的起点。它不依赖进程或服务状态,只读内核内存管理模块的实时快照。
关键看第三行 Swap:
-
Total:系统当前启用的交换空间总容量(含 swap 分区 + swap 文件) -
Used:已被内核实际调用的交换页数量(不是“分配了但没用”,是真正在读写的数据) -
Free:尚未被使用的交换空间
注意:Used > 0 并不等于内存不足——Linux 会预加载部分冷数据到 swap 以腾出 RAM 给活跃进程,只要 si/so 值稳定为 0(见下一条),就属正常调度。
为什么 vmstat 1 5 比 free 更能判断虚拟内存是否在“干活”
free 只告诉你“用了多少”,vmstat 才告诉你“正在怎么用”。执行 vmstat 1 5 后重点盯住最后两列:
-
si(swap-in):每秒从 swap 读回 RAM 的千字节数 -
so(swap-out):每秒写入 swap 的千字节数
如果连续 5 秒里任一列频繁出现非零值(尤其 >100 KB/s),说明物理内存持续承压,内核正被迫做页面换入换出——这才是虚拟内存“正在运行”的真实信号。单纯 free 显示 Used 为 2GB,但 si/so 全是 0,那只是静态驻留,没产生 I/O 开销。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
如何确认 swap 设备到底挂载了哪些文件或分区
free 和 vmstat 都不告诉你 swap 落在哪。真正权威的来源是:
-
swapon --show=NAME,TYPE,SIZE,USED,PRIORITY:列出所有已启用的 swap 设备,区分partition(如/dev/sda2)和file(如/swapfile),并显示各自使用量 -
cat /proc/swaps:输出更底层的挂载路径、类型、优先级,字段对齐严格,适合脚本解析 -
sudo swapon --summary:汇总总启用容量与当前使用量,避免遗漏休眠专用 swap 分区(某些发行版会额外挂载)
常见坑:改过 /etc/fstab 但没执行 sudo swapon -a,或删了 /swapfile 却没 sudo swapoff,会导致 free 显示有 swap 但 /proc/swaps 为空——此时 swap 实际未生效。
单个进程有没有用到虚拟内存?ps 和 /proc/<pid>/status</pid> 怎么交叉验证
虚拟内存不是全局开关,是每个进程独立申请的地址空间。要看某进程是否大量依赖 swap:
- 先用
ps -o pid,comm,vsize,rss,%mem -p <pid></pid>查VSIZE(虚拟内存总量)和RSS(实际驻留物理内存)。若VSIZE是RSS的 5 倍以上,说明该进程地址空间很大,但大部分未映射到物理页——这部分空洞可能后续被 swap 承载 - 再查
cat /proc/<pid>/status | grep -E "VmSize|VmRSS|VmSwap"</pid>:VmSwap字段直接显示该进程当前被换出到 swap 的内存页大小(单位 kB)。这是唯一能定位到进程级 swap 使用的指标 - 注意:
VmSwap为 0 不代表进程完全没触发 swap,只是当前没有页被换出;它会随内存压力动态变化
真正难排查的是那些 VmSwap 小但 si/so 高的场景——往往多个中等内存进程共同推高压力,单看一个 PID 会漏掉全局关联性。

















