内存碎片化四
如何衡量 Linux 服务器内存是否不足?
判断内存是否不足,主要通过 当前使用情况、Swap 交换、OOM(Out of Memory)日志 以及 高阶内存碎片化 来综合分析。
1. 关键指标检查
✅ 1.1 free -m 检查可用内存
free -m
示例输出:
total used free shared buff/cache available
Mem: 128000 125000 1000 2000 5000 3000
Swap: 8192 5000 3192
| 指标 | 正常情况 | 内存不足表现 |
|---|---|---|
| free | 大于 5% | 小于 2%(持续低) |
| available | 大于 10% | 小于 5% |
| Swap used | 低于 30% | 持续高,超过 50% |
📌 分析:
-
如果
available低于 5%,表示系统可分配的内存极少,容易 OOM。 -
如果
Swap used过高,说明物理内存不够,导致系统频繁使用 Swap,影响性能。
✅ 1.2 vmstat 检查 Swap 使用情况
vmstat 1 5
示例输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 5000 1000 2000 5000 3 5 50 100 500 800 30 10 50 10 0
| 指标 | 正常情况 | 内存不足表现 |
|---|---|---|
| si (swap in) | 0 或极低 | 持续大于 10 |
| so (swap out) | 0 或极低 | 持续大于 10 |
📌 分析:
-
so持续大于 10:说明系统正在频繁把数据从物理内存换出到 Swap,表示内存压力大。 -
si持续大于 10:说明系统频繁从 Swap 读取数据,影响性能。
✅ 1.3 sar 查看历史内存使用
sar -r 5 10
如果 kbmemfree 持续接近 0,说明长期内存不足。
2. 高阶内存碎片检查
✅ 2.1 /proc/buddyinfo 查看高阶内存
cat /proc/buddyinfo
异常表现:
-
高阶(order ≥ 4)全部为 0 → 说明无法分配大块内存。
-
order 0 过多,但高阶几乎没有 → 说明碎片化严重。
📌 影响:
-
可能导致大页分配失败(HugePages)。
-
影响数据库、虚拟机、缓存等应用。
3. OOM 记录检查
✅ 3.1 dmesg 检查 OOM 记录
dmesg | grep -i "Out of memory"
如果存在如下日志,说明系统已经因为内存不足杀死进程:
Out of memory: Killed process 12345 (java) total-vm:1024000kB, anon-rss:512000kB
📌 影响:
-
OOM 杀死关键进程,导致服务异常。
4. 进程占用分析
✅ 4.1 top 或 htop 查看高内存占用进程
top -o %MEM
如果有单个进程占用 超过 50% 的内存,可能是内存泄漏或异常消耗。
总结
| 检查项 | 正常情况 | 内存不足表现 |
|---|---|---|
free -m |
available > 10% |
available < 5% |
vmstat |
si/so ≈ 0 |
si/so > 10 持续发生 |
sar -r |
kbmemfree 变化 |
kbmemfree 长期接近 0 |
buddyinfo |
高阶内存正常 | 高阶 0,碎片严重 |
dmesg |
无 OOM | OOM 频繁出现 |
top |
进程正常 | 进程占用异常高 |
📌 结论
如果:
-
free -m可用内存低于 5% -
vmstatsi/so持续高 -
buddyinfo高阶内存为 0 -
dmesg有 OOM 记录
✅ 说明内存严重不足,建议扩容或优化进程内存占用。
浙公网安备 33010602011771号