深色模式
内存与 CPU 查看 free/vmstat/mpstat
摘要:内存"满了"到底是真不够还是被缓存占着?负载高是不是 CPU 扛不住?本文用 free/vmstat/mpstat 帮你读明白。前提:任意主流 Linux,建议安装 sysstat。
适用环境
bash
cat /etc/os-release | head -2
free --version # 一般已自带
mpstat --version 2>/dev/null || echo "需安装 sysstat"
# Debian/Ubuntu: apt install -y sysstat
# CentOS/RHEL: yum install -y sysstat1
2
3
4
5
2
3
4
5
一、查看内存
bash
free -h # 人类可读,重点看 available
# total/used/free/buff/cache/available
# available ≈ 真正还能用的内存(含可回收缓存)1
2
3
2
3
注意
Linux 会把空闲内存拿来做 cache/buffer 加速 IO,所以 free 很小是正常的。判断内存够不够看 available,不是 free。
二、综合性能快照
bash
vmstat 1 5 # 每秒一次,共 5 次
# 关注:si/so(换入换出,非 0 说明在用 swap,危险)
# r(运行队列,长期 > CPU 核数说明排队)
# us/sy/id/wa(用户/系统/空闲/IO等待 百分比)1
2
3
4
2
3
4
三、按 CPU 核心看使用率
bash
mpstat -P ALL 1 3 # 所有核心,每秒一次共 3 次
# %usr 高:应用自身耗 CPU;%sys 高:内核/系统调用多
# %iowait 高:瓶颈在磁盘 IO,不是纯 CPU
nproc # 查看 CPU 核心总数,辅助判断负载1
2
3
4
2
3
4
验证
- [ ]
free -h能说出 available 与 free 的区别 - [ ]
vmstat 1能识别 si/so 是否为 0 - [ ]
mpstat -P ALL能看到每核使用率
常见坑
- 把 cache 当内存泄漏:cache 会被自动回收,available 正常就别慌。
- 负载高≠CPU 满:load average 高可能是 IO 等待(wa 高),看 mpstat 区分。
- 容器里数字失真:在 docker 内 free 看到的是宿主机内存,需用 cgroup 限额查看。
- sysstat 首次无数据:mpstat 依赖采集,刚装好可能要等一个周期才有历史值。