如何看linux系统的内存使用情况
- Linux
- 2025-08-07
- 4
free -h
或
top
命令查看 Linux 系统实时内存
在Linux系统中,了解内存使用情况是性能调优、故障排查和资源规划的核心环节,以下从核心命令解析、关键指标解读、场景化实践三个维度展开详细说明,并提供可落地的操作指南。
基础命令全解析
free
命令家族
这是最经典的内存统计工具,通过free -h
(人性化显示单位)可快速获取总览:
| 字段 | 说明 | 典型值示例 |
|—————|———————————————————————-|——————|
| total | 物理内存总量 | 15.6 GiB |
| used | 已被占用的内存(含缓存/缓冲区) | 8.2 GiB |
| free | 未被使用的物理内存 | 7.4 GiB |
| shared | 多个进程共享的内存区域 | 2.1 MiB |
| buff/cache | 内核用于磁盘读写加速的缓存池(重要!非”闲置”内存) | 5.8 GiB |
| available | 应用程序可直接申请的新内存(已扣除缓存预留) | 6.9 GiB |
️ 关键认知:Linux采用”贪婪分配+惰性回收”策略,buff/cache
占用高不代表浪费,反而是系统主动利用空闲内存提升I/O效率的表现,只有当available
持续低于阈值时才需警惕。
/proc/meminfo
深度探查
直接读取内核内存状态文件:
cat /proc/meminfo | grep -E 'MemTotal|MemFree|Cache|Buffers'
输出示例:
MemTotal: 16384000 kB
MemFree: 7424000 kB
Buffers: 256000 kB
Cached: 5894400 kB
- MemAvailable字段(新版内核):综合计算可安全分配给用户进程的内存量,比传统
free
更准确。 - SwapCached:存放在交换分区中的缓存页,频繁换页会导致性能骤降。
top
/htop
动态监控
启动htop
(需安装)后重点关注:
- RES:进程实际使用的物理内存(不含共享库)
- VIRT:虚拟地址空间大小(通常远大于物理内存)
- SHR:与其他进程共享的内存(如glibc库)
- %MEM:该进程占物理内存的比例
按F6
可按内存占用排序,快速定位TOP5耗内存进程。
进阶分析技巧
交换空间(Swap)健康度检测
通过swapon --show
查看配置:
swapon --show # NAME TYPE SIZE USED PRIO /dev/sda2 partition 4G 0B -2
理想状态应满足:
- Swap使用率 < 20%(长期>50%需扩容)
- Swap In/Out速率稳定(
vmstat 1
观察si/so列)
大页内存(Huge Pages)专项检查
适用于数据库等高性能场景:
cat /proc/meminfo | grep Huge # HugePages_Total: 512 # HugePages_Free: 487 # HugePages_Rsvd: 0 # HugePages_Surp: 0 # Hugepagesize: 2048 kB
若发现HugePages_Free
长期接近HugePages_Total
,说明业务未充分利用大页特性。
NUMA架构下的节点分布(多路服务器必看)
使用numactl --hardware
查看CPU与内存节点映射关系,配合numastat
监测跨节点访问延迟。
典型场景应对策略
现象特征 | 可能原因 | 解决方案 |
---|---|---|
available <总内存20% |
OOM杀手频繁触发 | 增大SWAP容量/优化应用内存泄漏 |
Cached 突降+磁盘IO飙升 |
应用大量写入新数据 | 属正常现象,无需干预 |
Swap Used >80% |
物理内存严重不足 | 升级硬件/终止非关键进程 |
单个进程%MEM >90% |
内存泄漏或配置不当 | strace跟踪系统调用 |
可视化工具推荐
- GNOME System Monitor:图形化界面适合新手,实时显示各进程内存占用曲线。
- nmon:IBM开发的交互式监控工具,支持按时间范围生成内存使用报告。
- Prometheus+Grafana:企业级方案,可定制内存使用率告警规则。
相关问答FAQs
Q1: 为什么明明看到很多free memory,系统却提示内存不够?
A: Linux的”free”不等于Windows的可用内存,当应用程序申请大块连续内存时,虽然free
显示充足,但可能因碎片化无法满足需求,此时应关注available
字段,它已自动扣除为保证系统稳定预留的缓存空间,可通过echo 1 > /proc/sys/vm/overcommit_memory
临时允许超额分配测试。
Q2: 如何判断是否需要增加交换分区大小?
A: 监控三个指标:① swapon -s
查看当前使用率;② vmstat 1
观察so(换出次数)是否持续增长;③ dmesg | grep oom-killer
检查是否触发过OOM,若swap使用率长期>70%且伴随明显卡顿,建议将swap设置为物理内存的1-2倍,注意SSD时代适当减小swap也可