free -h
命令可查看剩余内存,-h`表示以人类可读的GB/MB格式显示在 Linux 系统中,监控剩余内存是保障系统稳定运行的重要操作,以下是多种查看内存剩余量的方法及详细解析:
核心命令行工具
-
free 命令
-
基础用法:
free -h
(-h 表示以人类可读的 MB/GB 为单位)total used free shared buff/cache available Mem: 15G 9G 3G 1.5G 2G 4G Swap: 2G 0B 2G
- 关键指标:
| 字段 | 含义 |
|—————|————————–|
| total | 总物理内存 |
| used | 已用内存(包含缓存) |
| free | 完全空闲内存 |
| available | 可分配给新进程的内存 |
| buff/cache | 缓冲区和缓存占用 |
| shared | 共享内存(如 tmpfs) | - 注意:
available
比free
更真实反映可用量,因 Linux 会将缓存释放后分配给新进程。
- 关键指标:
-
扩展参数:
-t
:显示 Total 和 OS 可见的总量(排除硬件保留内存)。-s
:设置刷新间隔(如free -s 5
每 5 秒刷新一次)。
-
-
top/htop 命令
- 动态监控:
top
默认每 3 秒刷新,按q
退出;htop
支持鼠标操作。 - 关键区域:
- 顶部摘要:显示
KiB Mem : 923456/1572864 (58%)
,即已用/总内存。 - 任务列表:按
M
键按内存占用排序,快速定位高消耗进程。
- 顶部摘要:显示
- 交互命令:
1
:只显示 CPU 和内存占用最高的进程。shift+H
(htop):显示线程而非进程。
- 动态监控:
-
vmstat 命令
- 语法:
vmstat -s
输出内存相关统计。16789872 K total memory 9452888 K used memory 2345678 K active memory ...
- 核心指标:
used memory
:当前已用内存。free memory
:未分配内存。active memory
:最近使用的活跃内存。
- 语法:
-
/proc/meminfo 文件
- 直接查看:
cat /proc/meminfo
MemTotal: 16384256 kB MemFree: 2345678 kB MemAvailable: 4325678 kB Buffers: 123456 kB Cached: 987654 kB
- 关键字段:
MemAvailable
:扣除缓存后可分配内存。Buffers
:内核缓冲区(如块设备 I/O)。Cached
:页面缓存(文件系统缓存)。
- 直接查看:
内存剩余量计算逻辑
指标 | 计算公式 |
---|---|
实际剩余内存 | MemAvailable (可直接用于启动新进程) |
理论最大剩余 | MemFree + Cached + Buffers (需压缩缓存后释放) |
已用内存 | MemTotal MemAvailable |
示例:若 MemTotal=16G
, MemAvailable=4G
, 则已用内存为 12G,但部分被缓存占用,实际可立即用的是 4G。
高级监控与自动化
-
实时监控脚本
while true; do date +"%F %T" ; free -h | grep Mem ; echo "---------" sleep 5 done
- 输出示例:
2024-07-24 14:00:00 total used free shared buff/cache available Mem: 15G 9G 3G 1.5G 2G 4G ---------
- 输出示例:
-
阈值报警
- Shell 脚本:
if [ $(free -m | awk '/^Mem:/ {print $7}') -lt 1000 ]; then echo "内存不足!可用内存:$(free -m | awk '/^Mem:/ {print $7}')MB" | mail -s "内存告警" admin@example.com fi
- 说明:当
available
低于 1G 时发送邮件告警。
- Shell 脚本:
-
集成监控工具
- Prometheus + Grafana:通过
node_exporter
采集MemAvailable
等指标,可视化历史趋势。 - 自定义埋点:在应用中嵌入内存检测逻辑(如 Python 的
psutil.virtual_memory()
)。
- Prometheus + Grafana:通过
常见问题解答(FAQs)
-
问:为什么
free
显示可用内存很低,但系统仍流畅?
答:Linux 采用惰性缓存机制,used
包含文件系统缓存和应用程序缓存,当新进程需要内存时,系统会自动释放缓存,因此即使free
中的available
较低,也不一定影响性能,建议关注available
而非free
。 -
问:如何强制清除缓存以释放内存?
答:可使用echo 3 > /proc/sys/vm/drop_caches
(需 root 权限),但此操作通常无需手动执行:- 参数含义:
1
:清除页面缓存。2
:清除目录项和 inode 缓存。3
:两者全清。
- 警告:频繁清理缓存可能导致性能下降,因系统需重新加载常用数据。
- 参数含义:
工具 | 适用场景 | 输出特点 |
---|---|---|
free | 快速查看总量 | 简洁,支持单位转换 |
top/htop | 实时监控进程 | 动态排序,定位高耗进程 |
vmstat | 系统资源综合分析 | 包含内存、交换、 I/O 等指标 |
/proc/meminfo | 精准获取原始数据 | 详细但需过滤无关字段 |
通过组合使用上述工具,可全面掌握内存使用状态,建议优先关注 MemAvailable
和 available
字段,避免误判缓存占用导致的“假缺内存”。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/75912.html