free命令用于显示系统内存使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。它是监控系统内存使用的重要工具。
free [选项]
available字段表示可用于启动新应用程序的内存,不包括交换分区/proc/meminfo文件中读取| 字段 | 说明 |
|---|---|
| total | 总内存量(物理内存或交换分区) |
| used | 已使用的内存量(包含buffers/cache) |
| free | 完全空闲的内存 |
| shared | 被多个进程共享的内存(主要是tmpfs) |
| buff/cache | 被内核缓冲区(buffer)和页面缓存(cache)使用的内存 |
| available | 估算的可用内存(可用于启动新应用程序,无需使用swap) |
| 参数 | 说明 |
|---|---|
-b, --bytes |
以字节为单位显示内存 |
-k, --kilo |
以KB为单位显示内存(默认) |
-m, --mega |
以MB为单位显示内存 |
-g, --giga |
以GB为单位显示内存 |
--tera |
以TB为单位显示内存 |
-h, --human |
以人类可读的格式显示(自动选择合适的单位) |
-w, --wide |
宽输出模式,将buff/cache拆分为单独的buffers和cache列 |
-c, --count 次数 |
显示指定次数后退出,需与-s参数一起使用 |
-s, --seconds 秒数 |
连续显示,每间隔指定秒数刷新一次 |
--si |
使用1000的幂而不是1024的幂(KB、MB、GB等) |
-t, --total |
显示总计行(物理内存+交换分区) |
--help |
显示帮助信息 |
-V, --version |
显示版本信息 |
不带任何参数使用free命令:
$ free
total used free shared buff/cache available
Mem: 8168900 3123456 876543 123456 4168900 4523456
Swap: 2097148 0 2097148
输出解释:
使用-h参数以易读的格式显示:
$ free -h
total used free shared buff/cache available
Mem: 7.8Gi 3.0Gi 857Mi 120Mi 4.0Gi 4.3Gi
Swap: 2.0Gi 0B 2.0Gi
使用不同单位显示内存信息:
# 以MB为单位
$ free -m
total used free shared buff/cache available
Mem: 7981 3051 856 120 4074 4418
Swap: 2047 0 2047
# 以GB为单位
$ free -g
total used free shared buff/cache available
Mem: 7 2 0 0 3 4
Swap: 1 0 1
# 以字节为单位
$ free -b
total used free shared buff/cache available
Mem: 8364968960 3200000000 897000000 123000000 4267968960 4630000000
Swap: 2147479552 0 2147479552
使用-w参数将buff/cache拆分为buffers和cache:
$ free -w
total used free shared buffers cache available
Mem: 8168900 3123456 876543 123456 123456 4045444 4523456
Swap: 2097148 0 2097148
使用-t参数显示物理内存和交换分区的总计:
$ free -h -t
total used free shared buff/cache available
Mem: 7.8Gi 3.0Gi 857Mi 120Mi 4.0Gi 4.3Gi
Swap: 2.0Gi 0B 2.0Gi
Total: 9.8Gi 3.0Gi 2.8Gi
使用-s参数连续监控内存使用情况:
# 每2秒刷新一次
$ free -s 2
# 每5秒刷新,共显示5次
$ free -s 5 -c 5
# 人类可读格式连续监控
$ free -h -s 3
使用watch命令实现更灵活的监控:
# 每2秒刷新free命令
$ watch -n 2 free -h
# 带时间戳的监控
$ watch -n 1 'echo "=== $(date) ==="; free -h'
# 监控特定指标
$ watch -n 1 'free -h | grep -A1 "Mem:"'
使用脚本记录内存使用情况:
#!/bin/bash
# 记录内存使用情况到文件
LOG_FILE="memory_usage.log"
echo "时间戳,总内存,已使用,空闲,共享,buff/cache,可用,总swap,已用swap,空闲swap" > "$LOG_FILE"
while true; do
# 获取内存信息
mem_info=$(free -k | grep -E "Mem:|Swap:")
# 提取数据
mem_line=$(echo "$mem_info" | grep "Mem:")
swap_line=$(echo "$mem_info" | grep "Swap:")
mem_total=$(echo "$mem_line" | awk '{print $2}')
mem_used=$(echo "$mem_line" | awk '{print $3}')
mem_free=$(echo "$mem_line" | awk '{print $4}')
mem_shared=$(echo "$mem_line" | awk '{print $5}')
mem_buffcache=$(echo "$mem_line" | awk '{print $6}')
mem_available=$(echo "$mem_line" | awk '{print $7}')
swap_total=$(echo "$swap_line" | awk '{print $2}')
swap_used=$(echo "$swap_line" | awk '{print $3}')
swap_free=$(echo "$swap_line" | awk '{print $4}')
# 记录到日志文件
echo "$(date '+%Y-%m-%d %H:%M:%S'),$mem_total,$mem_used,$mem_free,$mem_shared,$mem_buffcache,$mem_available,$swap_total,$swap_used,$swap_free" >> "$LOG_FILE"
sleep 60 # 每分钟记录一次
done
监控特定进程的内存使用增长:
#!/bin/bash
# 监控内存使用增长
echo "开始监控内存使用情况..."
echo "时间,可用内存,已用swap"
while true; do
available_mem=$(free -m | grep Mem | awk '{print $7}')
used_swap=$(free -m | grep Swap | awk '{print $3}')
echo "$(date '+%H:%M:%S'),${available_mem}MB,${used_swap}MB"
# 如果可用内存过少或swap使用过多,发出警告
if [ "$available_mem" -lt 100 ]; then
echo "警告:可用内存不足100MB!"
fi
if [ "$used_swap" -gt 100 ]; then
echo "警告:swap使用超过100MB!"
fi
sleep 30
done
available比free更能反映实际可用内存available持续减少且buff/cache没有相应减少,可能存在内存泄露# 清理页面缓存(谨慎使用)
echo 1 > /proc/sys/vm/drop_caches
# 清理目录项和inode缓存
echo 2 > /proc/sys/vm/drop_caches
# 清理页面缓存、目录项和inode
echo 3 > /proc/sys/vm/drop_caches
top、htop、vmstat等工具全面监控# 查看当前值(0-100,越高越倾向使用swap)
cat /proc/sys/vm/swappiness
# 临时修改
sudo sysctl vm.swappiness=10
# 永久修改
echo "vm.swappiness=10" >> /etc/sysctl.conf
sudo sysctl -p
A: 这是free命令的默认计算方式。buff/cache内存可以被释放用于新程序,所以Linux统计used时包含了这部分内存。
A: free是完全空闲的内存,available是估算的可用于新程序的内存(包括部分可回收的缓存)。
A: 可能是内存碎片或内存带宽限制导致的。使用vmstat或sar进一步诊断。
A: 使用top命令按内存排序(按M键),或使用ps aux --sort=-%mem | head。
A: 从/proc/meminfo文件读取。可以直接查看该文件获取更详细的内存信息。
top - 动态显示进程和系统资源使用情况htop - top的增强版,交互性更好vmstat - 报告虚拟内存统计信息ps - 显示进程状态sar - 系统活动报告器smem - 报告内存使用情况cat /proc/meminfo - 查看详细内存信息