掘金 后端 ( ) • 2024-04-28 14:36

image.png

在Linux操作系统中,free 命令是一个非常重要的工具,用于显示系统内存(包括物理内存和交换空间)的使用情况。

基本语法

free [选项]

常用选项

  • -b--bytes:以字节为单位显示内存信息。
  • -k--kilo:以千字节(KB)为单位显示内存信息。
  • -m--mega:以兆字节(MB)为单位显示内存信息(这是最常见的选项)。
  • -g--giga:以吉字节(GB)为单位显示内存信息。
  • -h--human:以人类可读格式(例如1K, 2M, 3G等)显示内存信息。
  • -s <秒数>--seconds=<秒数>:连续输出内存使用情况,每次间隔指定的秒数。
  • -t--total:在输出中添加总内存和总交换空间行。
  • -c--cache:显示缓冲与缓存的总量。
  • -w--wide:宽屏输出,适合更宽的终端窗口。

输出内容详解

运行 free -m 后得到的信息通常包含以下几列:

Mem

  1. total: 表示系统的总物理内存大小(RAM)。
  2. used: 当前已被分配和使用的内存大小,这包括了应用程序、内核数据结构以及缓冲区和缓存占用的部分。
  3. free: 可立即分配给新进程使用的空闲物理内存数量。
  4. shared: 多个进程共享的内存区域大小。
  5. buff/cache: 缓冲区(Buffers)和缓存(Cached)占用的内存,这些内存虽然在技术上被列为“used”,但在必要时可以迅速回收并重新分配给其他用途。
  6. available: 在某些版本的free命令中,还会有available这一列,它代表理论上可用于启动新应用程序的内存总量,考虑到了操作系统可能释放掉部分buffers/cache的情况。

Swap

输出还包括有关交换空间(Swap)的信息:

  • total: 系统总的交换空间大小。
  • used: 当前已使用的交换空间量。
  • free: 未使用的交换空间量。

了解更多

现代Linux内核对内存管理进行了优化,大量内存可能被用作文件系统缓存或页面缓存,这部分内存虽然显示为used,但实际上当有应用程序需要更多内存时,内核会自动回收这部分缓存而无需交换到磁盘。

因此,在评估系统内存使用效率时,不应仅仅关注usedfree的绝对值,还需结合buff/cacheavailable列来全面理解系统的内存状况。

常用命令

显示统计信息

# 人类可读格式(如K, M, G)显示
free -h

-h 参数表示以人类可读格式(如K, M, G)显示,并且包含更详细的列,比如available列,表示理论上可用于启动新应用程序的内存量。

持续监控内存

# 每5秒更新一次输出
free -s 5 -t