一、命令简介
free命令是 Linux 系统中用于查看系统内存使用情况的实用工具,可以显示物理内存(RAM)、交换空间(Swap)以及缓冲区和缓存的使用情况。该命令是系统管理员和开发人员监控系统内存状态、诊断性能问题的基础工具。
二、基本语法
free [选项]
权限要求:所有用户均可使用,无需特殊权限。 默认行为:如果不指定选项,默认以 KB 为单位显示内存信息。
三、常用选项详解
| 选项 | 全称 | 功能说明 | 示例 |
|---|---|---|---|
-h | --human | 以人类可读的格式显示(自动选择合适单位) | free -h |
-b | --bytes | 以字节为单位显示 | free -b |
-k | --kilo | 以 KB 为单位显示(默认) | free -k |
-m | --mega | 以 MB 为单位显示 | free -m |
-g | --giga | 以 GB 为单位显示 | free -g |
-t | --total | 显示内存总和(物理内存+交换空间) | free -t |
-s <秒数> | --seconds | 按指定间隔持续显示 | free -s 5 |
-c <次数> | --count | 指定刷新次数(需与-s配合) | free -s 2 -c 10 |
-w | --wide | 宽格式显示,拆分buffers和cache | free -w |
-l | --lohi | 显示详细的高低内存统计 | free -l |
--si | 使用1000的幂次而非1024 | free --si |
四、输出字段解释
4.1 Mem行(物理内存)
| 字段 | 说明 |
|---|---|
| total | 系统总物理内存大小 |
| used | 已使用的内存(包含缓存和缓冲区) |
| free | 完全未使用的内存 |
| shared | 被多个进程共享的内存 |
| buff/cache | 被缓冲区和缓存占用的内存 |
| available | 系统可用内存(核心指标) |
4.2 Swap行(交换空间)
| 字段 | 说明 |
|---|---|
| total | 交换分区总大小 |
| used | 已使用的交换空间 |
| free | 未使用的交换空间 |
五、实际应用场景
5.1 查看内存使用概况
# 推荐使用方式:人类可读格式
free -h
输出示例:
total used free shared buff/cache available
Mem: 7.7G 3.0G 1.0G 120M 3.7G 4.3G
Swap: 2.0G 0B 2.0G
5.2 持续监控内存变化
# 每2秒刷新一次,共显示5次
free -h -s 2 -c 5
# 持续监控直到手动停止(Ctrl+C)
free -h -s 3
5.3 显示内存总和
# 显示物理内存和交换空间的总和
free -th
输出示例:
total used free shared buff/cache available
Mem: 7.7G 3.0G 1.0G 120M 3.7G 4.3G
Swap: 2.0G 0B 2.0G
Total: 9.7G 3.0G 6.7G
5.4 宽格式显示
# 拆分显示buffers和cache
free -w
5.5 查看详细内存统计
# 显示高低内存统计信息
free -l
六、关键指标解读
6.1 available 字段的重要性
available 是判断内存是否充足的最重要指标,它表示系统当前可分配给新应用程序的内存大小。计算公式为:
available ≈ free + buffers + cached - 不可回收的部分
当 available 接近 total 时,说明内存充足;当 available 低于 total 的 10% 时,可能表示内存紧张。
6.2 内存使用率计算
# 计算内存使用率
free -m | awk '/Mem:/ {printf "使用率: %.1f%%\n", $3/$2 * 100}'
6.3 Swap 使用警示
如果 Swap 的 used 值持续较高或增长,说明物理内存不足,系统正在使用交换空间,这会导致性能下降。建议检查:
- 是否有内存泄漏
- 是否需要增加物理内存
- 调整 swappiness 参数(默认60,可降低到10-30)
七、最佳实践
7.1 日常监控脚本
#!/bin/bash
# 内存监控脚本
# 获取内存信息
MEM_INFO=$(free -m | awk '/Mem:/ {print $2,$3,$7}')
TOTAL=$(echo $MEM_INFO | awk '{print $1}')
USED=$(echo $MEM_INFO | awk '{print $2}')
AVAILABLE=$(echo $MEM_INFO | awk '{print $3}')
USAGE_PERCENT=$(echo "scale=2; $USED/$TOTAL*100" | bc)
# 判断内存状态
if [ $(echo "$USAGE_PERCENT > 90" | bc) -eq 1 ]; then
echo "警告:内存使用率超过90%!"
echo "总内存: ${TOTAL}M, 已用: ${USED}M, 可用: ${AVAILABLE}M, 使用率: ${USAGE_PERCENT}%"
fi
7.2 结合其他命令使用
# 结合top命令查看进程内存占用
top -bn1 | head -10
# 结合vmstat查看虚拟内存状态
vmstat 1 5
# 查看详细内存信息
cat /proc/meminfo
八、常见问题与解决方案
8.1 内存使用率高的处理
问题:used 很高但 available 充足 原因:Linux 会利用空闲内存做缓存,这是正常现象,无需担心。 解决方案:关注 available 字段,只要 available 充足,系统运行正常。
8.2 手动释放缓存
# 生产环境慎用!会导致性能短暂下降
sync; echo 3 > /proc/sys/vm/drop_caches
8.3 调整Swap使用策略
# 降低Swap使用倾向(0-100,默认60)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
九、与相关命令的区别
| 命令 | 特点 | 适用场景 |
|---|---|---|
| free | 查看内存总量和使用情况 | 快速了解内存概况 |
| top | 实时进程级资源监控 | 查看进程内存占用 |
| vmstat | 综合性能监控(内存、CPU、IO) | 性能瓶颈分析 |
| htop | 增强版top(图形化界面) | 交互式进程管理 |
十、总结
free命令是 Linux 系统内存监控的基础工具,通过掌握其核心选项和输出字段的含义,可以快速诊断内存问题、优化系统性能。关键要点:
- 优先使用
free -h:人类可读格式更直观 - 关注 available 字段:这是判断内存是否充足的核心指标
- 理解缓存机制:Linux 会利用空闲内存做缓存,这是正常优化
- 监控 Swap 使用:Swap used 持续增长可能表示内存不足
- 结合其他工具:配合 top、vmstat 等命令进行深度分析
通过合理使用 free 命令,可以有效监控系统内存状态,及时发现并解决内存相关问题,保障系统稳定运行。