核心命令行指南
在Linux服务器管理中,free、top、vmstat、smem 是查看内存使用情况的核心命令,以下为详细操作解析:

基础内存状态查看:free命令
执行命令:
free -h
输出解析:
total used free shared buff/cache available Mem: 62G 15G 2.3G 1.2G 44G 45G Swap: 4.0G 0B 4.0G
- total:物理内存总量
- available:系统可用内存(含缓存可回收部分)
- buff/cache:磁盘缓存(可被程序抢占)
关键参数: -m:以MB为单位显示-s 5:每5秒刷新一次
实时进程级内存监控:top命令
执行命令:
top
关键指标定位:
- 按
Shift+M按内存占用排序进程 - 查看列:
- %MEM:进程物理内存占比
- VIRT:虚拟内存总量(含共享库)
- RES:实际使用的物理内存(关键指标)
内存动态分析:vmstat命令
执行命令(每2秒刷新,共5次):

vmstat 2 5
输出关键列:
procs -----------memory---------- ---swap-- r b swpd free buff cache si so 0 0 0 2412348 102384 3981232 0 0
- swpd:已用交换分区大小
- si/so:Swap每秒写入/读取量(>0 需警惕)
高级内存报告:smem工具
安装与使用:
# Ubuntu/Debian sudo apt install smem # 生成进程内存报告 smem -r -k -P "nginx|mysql"
参数说明:
-k:显示单位为KB-r:按RES内存排序-P:过滤特定进程
内存瓶颈排查实战场景
▶ 场景1:available不足但free较高
原因:
缓存(buff/cache)未释放
解决方案:
# 释放页缓存(不影响运行中程序) echo 1 > /proc/sys/vm/drop_caches
▶ 场景2:Swap频繁写入(si/so > 0)
排查步骤:

- 检查内存压力:
grep -E '^(Swap|Mem)' /proc/meminfo
- 定位高内存进程:
ps -eo pid,comm,%mem --sort=-%mem | head -20
▶ 场景3:隐形内存泄漏检测
使用/proc/meminfo深度分析:
watch -n 1 "grep -E 'SReclaimable|Slab|Active:' /proc/meminfo"
- Slab:内核对象缓存
- SReclaimable:可回收Slab内存
服务器内存优化关键措施
- 调整Swappiness(降低Swap倾向):
sysctl vm.swappiness=10
- 限制进程内存(防OOM):
systemctl set-property nginx.service MemoryMax=4G
- 启用透明大页(THP):
echo always > /sys/kernel/mm/transparent_hugepage/enabled
运维经验之谈
“真正耗尽内存的往往不是应用本身,而是未被管理的缓存和内核碎片”
建议将vmstat -s加入每日巡检脚本,持续跟踪slab和active内存趋势,早于监控系统发现隐性泄漏。
你的服务器是否曾因内存问题宕机?欢迎分享你的故障排查经历或疑问 →
原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/11805.html