今天我们用到的命令虽然看起来复杂,但核心逻辑非常清晰。我把它们整理成了一份 Linux 内存故障排查“三板斧”速查表,方便你日后直接复用。
free -h
查看全局内存水位。重点关注 available(实际可用内存),它比 free 更准确。
numastat -m | grep -A 4 "Node"
解决“全局内存剩很多,但局部(某颗CPU)内存不够”的问题,多路服务器必查。
cat /proc/sys/vm/swappiness
确认内核是否“偏爱”使用 Swap(你的值是 10,非常健康,不激进)。
这是今天最实用的脚本,分为三个版本,由简到繁:
① 基础版(只看进程名 + 原始 kB)
② 进阶版(加入“用户名”)
核心改进:利用 stat -c '%U' 获取进程目录的属主,比解析 UID 更直接。
③ 终极版(自动缩放单位 GB/MB/KB)
解决读数不直观的问题,适合汇报或文档输出。
/proc/[0-9]*:只遍历数字命名的目录,避开 /proc/self 这类特殊目录,避免报错。
sort -k1 -rn:这里的 -k1 指的是按第一列(Swap 数值)降序排列,一定要在换算单位之前排序,否则按字符串排序会出错(比如 9.2 GB 排不过 800 MB)。
stat -c '%U':获取文件/目录的属主名,这是获取进程真实用户最快的方法。
sudo swapoff -a && sudo swapon -a
强制将 Swap 里的数据搬回物理内存(前提是当前物理内存足够装得下,你现在剩 400G,绝对安全)。
分享数字集成电路设计中的经验和方法。分享让工作更轻松。