我正在编写一个脚本,该脚本应该简单地告诉我不包括缓存的可用物理内存量,我注意到我的 Fedora 系统显示的输出格式与我拥有 Unix 帐户的 CentOS 系统不同:
$ free
total used free shared buff/cache available
Mem: 7865868 3934924 241300 485916 3689644 3093784
Swap: 8388604 950988 7437616
$ ssh -q centos free
total used free shared buffers cached
Mem: 1921876 1848024 73852 0 10120 87124
-/+ buffers/cache: 1750780 171096
Swap: 2097148 240428 1856720
$ free -V
free from procps-ng 3.3.10
$ ssh -q centos free -V
procps version 3.2.8
有没有一种方法可以让我的 Fedorafree
输出看起来像 CentOS 的输出?
答案1
不,这是不可能的。
请注意,这不仅仅是格式问题。 procps-ng 中的程序free
最近已更新,以包含MemAvailable
最近在 Linux 内核中引入的新指标,这比典型的(通常是错误的)“空闲 + 缓冲区/缓存”更好地指示了实际可用的内存。估计(见下文)。
procps-ng 3.3.10 中包含的程序free
不提供任何禁用此信息的选项。事实上,您看到的已经是“压缩”格式了。还有一个“宽”选项(尝试-w
或--wide
),它不聚合缓冲区和缓存。
如果您正在编写脚本来查找可用内存,我建议使用 free 报告的“可用”值,而不是“free + buffers/cache”。看这条评论Linux 内核邮件列表中解释了MemAvailable
引入的原因:
许多负载平衡和工作负载放置程序都会检查 /proc/meminfo 以估计有多少可用内存。他们通常通过将“免费”和“缓存”相加来做到这一点,这在十年前还不错,但今天几乎肯定是错误的。
这是错误的,因为 Cached 包含不可作为页面缓存释放的内存,例如共享内存段、tmpfs 和 ramfs,并且它不包含可回收的平板内存,在大多数空闲的系统上,这些内存可能会占用大部分系统内存很多文件。