显示物理内存和交换空间的使用情况
free命令 是一个用来显示系统物理内存和交换空间的使用情况的命令。它可以提供关于总量、已用、空闲、共享、缓冲和缓存的内存的信息。它还可以显示可用的内存,这是一个估计值,表示可以用来满足应用程序内存请求的内存量。free命令的输出可以帮助你了解系统的内存管理机制,以及如何优化内存的使用。 其实 free 命令中的信息都来自于 /proc/meminfo 文件。 /proc/meminfo 文件包含了更多更原始的信息,只是显示不太直观。
free命令是一个通用的Linux命令,它可以在大多数的Linux发行版中使用,包括Ubuntu, Debian, Fedora, CentOS, Red Hat, SUSE, Arch等。 如果你的系统没有安装free命令,你可以使用以下命令来安装它:
$ sudo apt update
$ sudo apt install procps
$ sudo yum install procps-ng
或者
$ sudo dnf install procps-ng
free 命令是 procps 或 procps-ng 软件包的一部分,这些软件包提供了一些用于监控系统资源和进程的命令,如 ps, top, vmstat 等。
free [options]
options 说明:
$ free
total used free shared buff/cache available
Mem: 8048372 2593004 1366712 658380 4088656 4494976
Swap: 0 0 0
第一行Mem:
available = free + buffer + cache
。第二行Swap:交换分区,也就是我们通常所说的虚拟内存。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 Swap 区上。内核提供了一个叫做 swappiness
的参数,用于配置需要将内存中不常用的数据移到 Swap 中的紧迫程度。数值越小表示尽量不要使用 Swap 。
buffers 和 cached 都是缓存,两者有什么区别呢?
磁盘的操作有逻辑级(文件系统)和物理级(磁盘块)两种方式。为了提高磁盘存取效率,Linux 采取了两种Cache 方式: Page Cache 和 Buffer Cache,分别针对逻辑和物理数据进行缓存。
- Page Cache 是针对文件系统 inode 的缓存,在文件层面上的数据会缓存到 page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当 page cache 的数据需要刷新时,page cache 中的数据交给 buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的 cache 操作。
- Buffer Cache 是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到 buffer cache 中,例如,文件系统的元数据都会缓存到 buffer cache 中。
所以 Linux 系统只要不用 Swap 的交换空间,就不用担心自己的内存太少。一般情况下,少量地使用 Swap 也是不影响系统性能的。如果常常 Swap 用很多,可能你就要考虑加物理内存了,这也是 Linux 看内存是否够用的标准。
$ free -h
total used free shared buff/cache available
Mem: 7.7Gi 2.5Gi 1.3Gi 643Mi 3.9Gi 4.3Gi
Swap: 0B 0B 0B
$ free -t
total used free shared buff/cache available
Mem: 8048372 2593004 1366712 658380 4088656 4494976
Swap: 0 0 0
Total: 8048372 2593004 1366712
$ free -s 2
total used free shared buff/cache available
Mem: 8048372 2593004 1366712 658380 4088656 4494976
Swap: 0 0 0
total used free shared buff/cache available
Mem: 8048372 2593004 1366712 658380 4088656 4494976
Swap: 0 0 0
total used free shared buff/cache available
Mem: 8048372 2593004 1366712 658380 4088656 4494976
Swap: 0 0 0
^C
[linux@bashcommandnotfound.cn ~]$ free -l
total used free shared buff/cache available
Mem: 8048372 2593004 1366712 658380 4088656 4494976
Low: 8048372 2593004 1366712
High: 0 0 0
Swap: 0 0 0
$ sudo sync
$ sudo echo 3 > /proc/sys/vm/drop_caches
$ cat /proc/meminfo
$ vmstat -s