
服务器资源瓶颈是工作中最常见的告警类型之一。CPU飙高、内存占满、负载异常——这些症状可能由代码bug、异常流量、配置错误甚至外部攻击引起。快速准确定位问题根源,是每个Linux使用者的必备技能。本篇作为下篇,下篇将围绕内存问题展开详细排查,从内存使用率分析、缓存占用定位到内存泄漏溯源,带你全面掌握内存性能瓶颈的标准化排查流程。
排查命令整体顺序
1. free:内存使用概况。快速查看系统物理内存、交换分区使用情况,判断是否内存不足或频繁 Swap。
常用命令:
# 以MB为单位显示系统内存使用情况(无单位后缀,仅数值)free -m

# 以 GB 为单位显示系统内存使用情况(无单位后缀,仅数值)free -g

# 由系统自动选取单位显示系统的内存使用情况(自动适配单位并带后缀,无需手动换算)free -h

# 详细显示内存,拆分显示缓存项,将 buffers(内核缓冲区)与 cache(页缓存)分开统计free -w

# 显示内存并统计总和free -t

# 每秒刷新显示内存使用watch -n 1 free -m

2. vmstat:虚拟内存统计。系统级性能监控工具,同时查看内存、Swap、IO、CPU,定位内存瓶颈根源。
常用命令:
# 每5秒刷新系统性能统计vmstat 5

# 每隔 1 秒采样 1 次,总共采样 10 次vmstat 1 10

# 显示系统内存/CPU统计详情vmstat -s

# 显示内核内存池信息vmstat -m

3. ps:查看内存占用。按内存占用排序进程,快速锁定占用内存最高的程序,区分虚拟内存与物理内存。
常用命令:
# 按内存降序,显示占用最高的前5个进程ps aux --sort=-%mem | head -5

# 查看root用户进程,自定义显示资源占用ps -u root -o pid,vsz,rss,pcpu,pmem,comm

# 按内存降序,取前20个进程ps -eo pid,comm,rss --sort=-rss | head -20

# 按内存降序,格式化显示进程内存(单位MB)ps -eo pid,comm,rss --sort=-rss | awk '{printf "%s %s %.2f MB\n", $1, $2, $3/1024}'

4. slabtop:内核缓存。专门分析内核 slab 缓存占用,解决「内存莫名被占满」的内核级问题。
常用命令:
# 按缓存数量排序显示内核slab信息slabtop -s c

# 按对象数量排序显示slabslabtop -s a

# 按对象数量排序显示slab信息slabtop -s o


