内存碎片化四

如何衡量 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 tophtop 查看高内存占用进程

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 进程正常 进程占用异常高

📌 结论

如果:

  1. free -m 可用内存低于 5%

  2. vmstat si/so 持续高

  3. buddyinfo 高阶内存为 0

  4. dmesg 有 OOM 记录

说明内存严重不足,建议扩容或优化进程内存占用。

posted on 2025-03-31 17:59  吃草的青蛙  阅读(161)  评论(0)    收藏  举报

导航