free命令

free 命令 #

free命令用于显示系统中可用和已用的物理内存和交换空间的总量。它提供了系统内存使用情况的快照,是诊断内存相关问题的基本工具。

语法 #

free [选项]

常用选项 #

选项 描述
-b 以字节为单位显示内存大小
-k 以千字节为单位显示内存大小(默认)
-m 以兆字节为单位显示内存大小
-g 以吉字节为单位显示内存大小
-h 以人类可读的格式显示内存大小(自动选择单位)
-t 显示总计行
-s 秒数 每隔指定的秒数重复显示
-c 次数 与-s一起使用,指定重复显示的次数
--si 使用1000而不是1024作为单位进制
-w 使用宽输出格式(显示更多列)
--help 显示帮助信息
-V, --version 显示版本信息

输出列说明 #

free命令的输出包含以下列:

  • total:总内存大小
  • used:已使用的内存大小
  • free:空闲内存大小
  • shared:多个进程共享的内存大小
  • buff/cache:用于缓冲区和缓存的内存大小
  • available:可用于启动新应用程序的内存大小(不需要交换)

常见用法 #

1. 显示基本内存信息 #

free

输出示例:

              total        used        free      shared  buff/cache   available
Mem:        8167872     3159032      873828      772312     4135012     3922152
Swap:       2097148      114688     1982460

2. 以人类可读的格式显示 #

free -h

输出示例:

              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       3.0Gi       853Mi       754Mi       3.9Gi       3.7Gi
Swap:         2.0Gi       112Mi       1.9Gi

3. 以兆字节为单位显示 #

free -m

输出示例:

              total        used        free      shared  buff/cache   available
Mem:           7975        3085         853         754        4037        3829
Swap:          2047         112        1935

4. 显示总计行 #

free -t

输出示例:

              total        used        free      shared  buff/cache   available
Mem:        8167872     3159032      873828      772312     4135012     3922152
Swap:       2097148      114688     1982460
Total:     10265020     3273720     2856288

5. 每隔3秒显示一次,共显示5次 #

free -s 3 -c 5

6. 使用宽输出格式 #

free -w

输出示例:

              total        used        free      shared     buffers       cache   available
Mem:        8167872     3159032      873828      772312      389108     3745904     3922152
Swap:       2097148      114688     1982460

实用示例 #

1. 监控内存使用变化 #

watch -n 1 free -h

这将每秒更新一次内存使用情况。

2. 查看内存使用百分比 #

free | grep Mem | awk '{print "Memory usage: " $3/$2*100 "%"}'

3. 清除缓存以释放内存 #

首先查看当前内存使用情况:

free -h

然后清除页面缓存:

sudo sh -c "sync; echo 1 > /proc/sys/vm/drop_caches"

再次查看内存使用情况:

free -h

4. 结合其他命令分析内存 #

free -m && vmstat && top -bn1 | head -20

这将显示内存使用情况、虚拟内存统计和系统进程信息。

理解Linux内存管理 #

在Linux系统中,“空闲"内存的概念可能会引起误解。Linux会尽可能地使用可用内存作为磁盘缓存,以提高系统性能。因此,free命令中的available列比free列更能准确反映实际可用的内存量。

缓冲区与缓存的区别 #

  • 缓冲区(buffers):用于存储即将写入磁盘的数据
  • 缓存(cache):用于存储从磁盘读取的数据,以便快速访问

这两种内存都可以在需要时被回收,用于运行应用程序。

与其他内存监控工具的比较 #

工具 优点 缺点
free 简单、快速、几乎所有系统都可用 只提供静态快照,信息有限
top/htop 交互式,提供更多详细信息 需要更多资源,信息可能过多
vmstat 提供内存和其他系统资源的统计信息 输出格式不太直观
/proc/meminfo 提供最详细的内存信息 需要手动解析,不易读

提示 #

  • 在现代Linux系统中,available列比free列更重要,它表示可用于新应用程序的内存量
  • 高缓存使用量通常是好事,表示系统正在有效利用内存提高性能
  • 如果available内存很低且swap used持续增加,可能表示系统内存不足
  • 使用-h选项可以使输出更易读
  • 定期监控内存使用趋势比单次查看更有价值
  • 在服务器环境中,结合freevmstatsar等工具可以获得更全面的内存使用情况