Linux free 命令
概述
内存管理专家必备技能
命令概述
free 命令用于显示系统内存使用情况,包括物理内存、交换分区、内核缓冲区等信息。它是系统管理员监控内存状态的核心工具。
核心作用:
实时查看系统内存使用状态
监控缓存和缓冲区占用情况
分析交换分区使用率
为性能调优提供数据支持基本语法
free [选项]
| 参数 | 说明 | 示例 |
|---|---|---|
| -h, --human | 以人类可读格式显示(KB、MB、GB) | free -h |
| -m | 以MB为单位显示 | free -m |
| -g | 以GB为单位显示 | free -g |
| -k | 以KB为单位显示(默认) | free -k |
| -s 秒数 | 持续监控,每隔指定秒数刷新 | free -s 2 |
| -c 次数 | 指定显示次数 | free -c 5 |
| -t | 显示总计行 | free -t |
输出详解
典型输出示例:
free -h
total used free shared buff/cache available Mem: 7.7Gi 2.1Gi 3.2Gi 234Mi 2.4Gi 5.1Gi Swap: 2.0Gi 0B 2.0Gi
Mem 行(物理内存)
total: 总物理内存大小
used: 已使用内存的大小,包含共享内存
free: 空闲内存,未使用内存的大小
shared: 共享内存的大小
buff/cache: 缓冲区/缓存
available: 新进程可用内存的大小(包括可回收的缓存,但是请注意并不是所有缓存都可回收)
Swap 行(交换分区)
total: 总交换分区大小
used: 已使用交换分区
free: 空闲交换分区
内存类型详解
已使用 30%
缓冲区 15%
缓存 25%
空闲 30%
Buffer(缓冲区)
用于缓存磁盘块设备的数据,提高I/O效率。主要存储:
文件系统元数据
目录信息
inode 缓存
Cache(页面缓存)
用于缓存文件内容,加速文件访问。包括:
最近访问的文件数据
程序代码段
共享库
关键理解:
Buffer/Cache 内存在需要时可以被释放给应用程序使用,所以 available 才是真正可用的内存量!实用示例
实时监控
free -h -s 2
每2秒刷新一次内存状态,适合监控内存变化
输出到文件
free -h -s 10 -c 6 >> mem.log
每10秒记录一次,共记录6次到日志文件
获取数值
free -m | awk 'NR==2{print $3}'只获取已使用内存的MB数值,便于脚本处理
内存使用率
free | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}'计算并显示内存使用百分比
运维场景应用
高负载排查
while true; do date; free -h; sleep 5; done
持续监控内存状态,配合时间戳排查问题
性能分析脚本
#!/bin/bash
echo "=== 内存分析报告 ==="
free -h
echo ""
echo "内存使用率: $(free | awk 'NR==2{printf "%.2f%%", $3*100/$2}')"
echo "可用内存率: $(free | awk 'NR==2{printf "%.2f%%", $7*100/$2}')"高级用法
与其他命令结合
watch -n 1 "free -h && echo && ps aux --sort=-%mem | head -5"
实时显示内存状态和占用内存最多的5个进程
内存趋势分析
for i in {1..10}; do
echo "$(date): $(free -m | awk 'NR==2{print $3,$7}')"
sleep 60
done每分钟记录一次使用内存和可用内存
常见问题
Q: free显示内存不足,但available很多?
A: 这是正常的。Linux会将空闲内存用作缓存,提高系统性能。真正可用的内存看available列。
Q: 如何释放缓存内存?
A: 可以使用以下命令:
echo 3 > /proc/sys/vm/drop_caches
注意:非必要情况下不建议手动释放,系统会自动管理。
Q: swap一直在增长怎么办?
A: 可能原因:
物理内存不足
某个进程内存泄漏
系统负载过高
建议用top或htop查找占用内存最多的进程。
总结
掌握要点
关注available而非free
理解buffer/cache作用
监控swap使用情况
结合其他工具分析
建立监控告警机制free命令是Linux系统管理的基石工具,熟练掌握它能让你更好地理解和优化系统性能!