为什么vmstat的swpd不为零

Yve*_*ves 3 swap memory-usage

根据 的手册页vmstat,“swpd”表示使用的虚拟内存量。据我了解,在大多数情况下,除非物理 CPU 空间不足,否则它应该为零。

但是,我刚刚发现我的服务器的“swpd”值不为零。
在此处输入图片说明

我不知道为什么。即使我有 700 多个进程,CPU 也几乎 100% 未使用。
在此处输入图片说明

总共使用了大约190M的swap。与250G的总大小相比,它并没有那么大。

那么这是否意味着即使 CPU 空闲,某些进程也会使用虚拟交换?

vid*_*rlo 7

交换与 CPU 利用率无关。交换是写入磁盘的内存。

CPU 可以直接访问普通 RAM,而且 RAM 与 Swap 相比速度极快。这就是为什么我们有 RAM - 作为 CPU 需要访问的数据的快速缓冲区。

Swap 允许内核将未使用的内存写入磁盘,以便在需要时检索。这是一个代价高昂的过程,因为与内存相比,磁盘速度非常慢,但它也允许使用比物理内存更多的内存。

此外,有些东西可能永远不会被使用,但尚未分配内存空间。通常内核会换掉不使用的东西。

190MB用SWAP不是问题。问题是计算机是否必须写出东西来交换,然后再次检索它。

我的笔记本电脑目前有 445MB 写入交换空间,但仍有超过 3GiB 未使用的内存 - 显然内核在某个阶段发现了一些未使用的东西,并决定将其换掉。

简而言之:不要关心交换使用,除非:

  1. 你看到频繁的颠簸
  2. free -m 显示可用内存量非常低

free -m来自我的笔记本电脑的快速示例:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7702       7454        247        582        230       3477
-/+ buffers/cache:       3746       3955
Swap:         8191        445       7746
Run Code Online (Sandbox Code Playgroud)

如我们所见,有 247MiB 免费。但这并不是故事的全部。此外,还有超过 3GiB 的缓存,如果内核需要更多内存来做某事,可以非常快速地释放缓存。因此,实际可用内存量为 3955MiB,如 下的第二行所示free。您还会看到使用的交换。

简而言之:不要关心交换空间的使用,除非您遇到问题,例如软件响应非常缓慢 - 这是颠簸的好兆头。

要检查抖动,您可以运行vmstat -s以显示统计信息。你会看到两行,像这样:

   174085 pages swapped in
   569123 pages swapped out
Run Code Online (Sandbox Code Playgroud)

这是写入交换区和从交换区读取的页数。只要这些数字没有快速增加,一切都很好 - 交换为您提供更多内存用于实际应用程序和缓存,从而加速您的系统。