如何在Linux上使用免费命令

Linux free命令显示有多少计算机内存正在使用,以及还有多少内存可供程序使用。它的输出可能会让外行感到困惑,但我们将向您展示如何理解它。

自由命令

free命令在终端窗口中打印内存使用情况的快速摘要。它没有太多的选择或诀窍,也不需要花费太多的时间和精力来学习如何使用它。然而,学会正确解释它提供的信息则是另一回事。很容易被免费告诉你的东西搞糊涂。

部分原因是术语-例如“空闲”和“可用”之间的差异-部分原因是Linux内核的内存和文件系统管理例程的内部工作方式。如果您有空闲内存可供内核充分利用,它会将其借用用于自己的目的。直到你需要它回来。

我们将深入研究底层机制和数据例程,以便您了解幕后发生的事情,以及所有这些都如何影响您的随机存取存储器(RAM)的使用。

免费栏目

让我们在没有选择的情况下免费启动,看看我们会得到什么:

free

以一种丑陋的方式包裹着。在您的计算机上,您将能够伸展终端窗口。下面是一个更整齐的表格中的输出:

total used free shared buff/cache available Mem: 2038576 670716 327956 14296 1039904 1187160 Swap: 1557568 769096 788472

这些数字以千比字节为单位给出,即1024字节。在Manjaro上,free命令别名为free-m。这强制自由使用Mebibytes,即1,048,576字节。在其他发行版上,缺省值为千比字节。

顶行报告系统内存,底行报告交换空间。我们将在这里介绍这些列,稍后再详细介绍它们。内存行的列如下所示:

总数:计算机中安装的物理RAM总量。 已用:按Total-(空闲+缓冲区+缓存)计算。 可用空间:未使用的内存量。为什么不是Total=已用+免费?我们稍后会解释这一点。 共享:tmpfs文件系统使用的内存。 缓冲区/高速缓存:用于缓冲区和高速缓存的内存。 可用:这是对可用于处理来自应用程序、计算机中任何其他功能软件(如图形桌面环境和Linux命令)的内存请求的内存的估计。

对于交换行,列为:

总计:交换分区或交换文件的大小。 已用:正在使用的交换空间量。 空闲:剩余(未使用)的交换空间

宽敞的显示屏

要将缓冲区/缓存地物分离到各自的列中,请使用-w(宽)选项:

free -w

这就是结果。我们得到的不是BUFF/CACHE列,而是BUFERS列和CACHE列。以下是表格中的数字:

total used free shared buffers cache available Mem: 2038576 683724 265708 14660 94568 994596 1160420 Swap: 1557568 761416 796152

让我们看看各列中的数字代表什么。

合计列

这是最简单的一个。它是您在主板上安装的内存大小。这是所有正在运行的进程都在争夺的宝贵资源。如果内核不是裁判,至少他们会打架。

顺便说一下,FREE从/proc/meminfo伪文件中收集信息。您可以使用以下命令自己查看此文件:

less /proc/meminfo

输出是名称和值的单个列表。

已使用的列

这就是它开始变得有趣的地方。

使用的数字表示您可能会期望的结果,外加一堆其他内容。这是分配给进程的内存,由用户程序占用,并由桌面环境中的GNOME或KDE等使用。这没什么好惊讶的。但它还包括缓冲区和缓存数字。

没有用于某些用途的RAM是浪费的RAM。内核使用空闲RAM来保存缓存和缓冲区,使其能够更高效地运行。所以这个RAM是由内核使用的,而不是用户空间中的任何东西。

如果收到一个内存请求,而这个请求只能通过放弃内核用于自己设备的一些RAM来满足,那么这就是无缝发生的事情。释放此RAM并将其用于其他应用程序不会影响您的Linux系统的正确操作-什么都不会损坏-但它可能会影响系统的性能。

因此,此列实际上意味着“某物正在使用的所有RAM,即使它可以立即回收。”

“自由栏”(The Free Column)

此列保存未被任何内容使用的RAM数量的数字。因为Used列包含缓冲区和缓存数字,所以对于功能完善的Linux系统来说,很少有RAM被列为“空闲”的情况并不少见。

这并不一定是一件坏事,几乎可以肯定地说,您已经拥有了一个完全正常运行的系统,可以正确地调节RAM的使用。也就是说,RAM正由应用程序和其他用户空间进程以及内核使用,以尽可能提高计算机的性能。

共享列

SHARED列中的数字表示专用于保存所有基于tmpfs RAM的文件系统的内存。这些是在内存中创建的文件系统,以促进操作系统的高效运行。要查看存在哪些tmpfs文件系统,请使用df命令。

我们使用的选项包括:

-h(人):使用合理、最合适的单位。 --TOTAL:在输出底部显示合计行。 --type=tmpfs:仅报告tmpfs文件系统。

df -h --total --type=tmpfs

当您查看这些值时,第一件让您震惊的事情是它们比Shared列中的数字大很多倍。此处显示的大小是这些文件系统的最大大小。实际上,它们各自只占用所需的内存。Shared列中的数字是内存使用情况值得信赖的数字。

这些文件系统包含什么?以下是一个简单的细目:

/run:它包含许多临时文件,如PID文件、在重新引导时不必保留的systemd日志、与Unix域套接字、FIFO和守护进程管理有关的信息。 /dev/shm:这允许在Debian和Debian派生的Linux发行版上实现符合POSIX的内存管理。 /Run/lock:它保存锁定文件。这些用作指示器,让系统知道文件或其他共享资源正在使用中。它们包含使用该资源的进程的PID。 /sys/fs/cgroup:这是管理控制组的方案的中心元素,进程根据使用的资源类型被组织成分层的组。它允许监视和限制进程对资源的使用。 /run/user/121:*这是pam_systemd创建的文件夹,用于存储用户的临时文件。在本例中,用户的ID为121。请注意,“用户”可能是普通用户、守护进程或其他进程。 /run/user/1000:*这是pam_systemd创建的文件夹,用于存储该用户的临时文件,该用户的用户ID为1000。这是当前用户,用户Dave。

缓冲区和高速缓存列

仅当您使用了-w(宽)时,才会显示缓存和缓存列。如果没有-w选项,这两列中的数字将合并到Buff/Cache列中。

这两个存储区相互作用并相互依赖。缓存区(主要)保存已从硬盘读取的数据。它将被保留,以防您需要再次访问它。通过从高速缓存中拉出数据比从硬盘驱动器中读回数据来执行此操作速度更快。高速缓存还可以保存已修改但尚未写回硬盘驱动器的数据,或已计算但尚未保存到文件中的值。

为了跟踪各种文件片段和数据存储,内核在缓冲区内存区中构建了一个指向缓存内存区的索引。缓冲区是保存磁盘块和其他信息结构的内存部分。这些文件包含有关高速缓冲存储器区域中保存的数据的数据。因此,缓冲区是缓存的元数据。

当发出文件读取请求时,内核读取缓冲区数据结构中的数据,以查找已请求的文件或文件片段。如果找到,则从缓冲区数据结构指向的高速缓冲存储器区域服务该请求。如果它不存在于高速缓存中-因此也不存在于缓冲区内存区的元数据中-则从硬盘驱动器读取该文件。

缓冲存储器区域中的结构包括:

缓冲头:每个缓冲器在称为缓冲头的数据块中描述。此外,如果块中的数据被更改,并且相关的内存页被“弄脏”,则描述符会跟踪将数据写回硬盘驱动器的需要。 inode:inode保存有关文件和目录的元数据,包括它们在硬盘驱动器(或虚拟文件系统)上的位置、文件大小和文件的时间戳。 dentry:dentry(目录项)是保存目录列表信息的结构。可以将这些视为目录中文件和目录的inode列表。

您可以了解为什么将用于缓冲区和缓存内存区域的内存压缩到单个Buff/Cache列中是有意义的。它们就像是同一件事的两个部分。如果缓冲存储器区域没有提供对其内容的索引,则高速缓冲存储器区域将是无用的。

可用列

可用列是空闲列加上可以立即放弃的部分缓冲区和高速缓存列(或缓冲区/高速缓存列)的总和。可用栏只是一个估计值,而不是一个确切的数字。这是一个知情的估计,也是一个准确的估计,但它不应该被认为是精确到最后一个字节。

更改显示单位

要更改自由显示地物的单位,请使用以下选项之一。

-b:以字节为单位显示值。 -k:以千比字节(默认值)为单位显示值。 -m:以Mibibytes为单位显示值。 -g:以千兆字节为单位显示值。 -h:以合理的最佳匹配单位(人类可读的)单位显示值。

例如,要使用人类可读的值,请使用-h选项:

free -h

自由将为每个值使用最合适的单位。如您所见,一些值显示在MiB中,另一些值显示在GiB中。

显示总计

--total选项使free显示一个合计行,该合计行对Mem行和交换行的Total、Used和Free列的值进行求和。

free -h --total

计数选项

c(Count)选项告诉free运行一定次数,每次运行之间暂停一秒。要让自由运行两次,请使用以下命令:

free -h -c 2

不间断地自由奔跑

如果您想要查看某个应用程序对内存使用的影响,连续自由运行会很有用。这允许您在启动、使用和关闭您正在调查的应用程序时,在终端窗口中自由运行。

-s(秒)选项确定每次运行空闲时间之间的暂停持续时间。要让Free连续运行,并在每次更新之间暂停3秒,请使用以下命令:

free -s 3

按Ctrl+C停止该进程并返回到命令提示符。

组合计数和秒选项

要使自由运行在每次更新之间有指定的暂停,但在一定数量的报告之后停止,可以组合使用-s(秒)和-c(计数)选项。要让自由运行五次,并在每次更新之间暂停两秒,请使用以下命令:

free -s 2 -c 5

出现五个更新后,该进程将自动终止,您将返回到命令提示符。

分离低内存和高内存

现在这几乎没有什么用处,但是如果您在32位计算机上运行Linux,它可能会被证明是有用的。它将内存使用与低内存和高内存分开。

在基于32位Linux的操作系统上,CPU最多可以寻址4 GB的内存。内存分为低内存和高内存。内存不足直接映射到地址空间的内核部分。高内存没有直接的内核映射。高内存通常大于896MB。

这意味着内核本身(包括其活动模块)只能使用较低的内存。用户进程-任何不是内核本身的进程-都可能使用低内存和高内存。

在64位计算机上,不会显示高内存的值:

free -h -l

记忆就是由这个构成的

简要回顾一下:

总数:系统中安装的RAM总量。 已用:等于Total-(空闲+缓冲区+缓存)。 空闲:任何东西完全未使用的内存量。 共享:tmpfs文件系统占用的内存。 缓冲区:为缓存中存储的所有内容提供索引而维护的数据结构。 缓存:从硬盘读取的数据、等待写回硬盘的修改数据以及其他计算值。 可用:什么是真正免费的。对可用于满足内存请求的空闲、缓冲区和高速缓存中的内存的估计。

相关文章