为什么即使我将 vm.swappiness 设置为 0 也会交换?

Hor*_*tiu 5 memory swap virtual-machine linux-kvm swappiness

我有几个CentOS 6.5 x64 服务器,64 GB RAM 运行大量KVM VPS

其中一些服务器根本没有交换使用,而有些则使用。我已将swappiness设置为零。但是,即使 RAM 中有大量空闲 GB,有些仍然会交换。

有问题的* 程序是 qemu-kvm - VPS 是 KVM 虚拟机。

这是top通过交换排序的输出(Op 输入):

top - 10:47:31 up 14 days,  1:25,  1 user,  load average: 0.05, 0.10, 0.13
Tasks: 325 total,   1 running, 324 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.4%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65940252k total, 41202572k used, 24737680k free,  9129148k buffers
Swap:  5240808k total,  1039544k used,  4201264k free, 10935732k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
11653 qemu      20   0 1437m 725m 4968 S  0.0  1.1  24:23.56  51m qemu-kvm
 4873 qemu      20   0 1451m 743m 4968 S  0.0  1.2  22:32.94  50m qemu-kvm
14265 qemu      20   0 1443m 742m 4968 S  0.0  1.2  27:21.25  47m qemu-kvm
 5928 qemu      20   0 1445m 751m 4968 S  0.0  1.2  24:56.82  45m qemu-kvm
11294 qemu      20   0 1436m 718m 5004 S  0.0  1.1  23:35.45  45m qemu-kvm
10016 qemu      20   0 1438m 741m 4968 S  0.0  1.2  24:58.07  45m qemu-kvm
 8028 qemu      20   0 1445m 725m 4968 S  0.0  1.1  22:49.86  44m qemu-kvm
13449 qemu      20   0 1439m 738m 5008 S  0.3  1.1  25:49.07  43m qemu-kvm
 9065 qemu      20   0 1439m 738m 4968 S  0.0  1.1  22:35.70  41m qemu-kvm
 5173 qemu      20   0 1443m 748m 4968 S  0.3  1.2  24:57.27  41m qemu-kvm
 6833 qemu      20   0 1445m 735m 4968 S  0.3  1.1  24:43.94  40m qemu-kvm
12901 qemu      20   0 1447m 754m 4968 S  0.7  1.2  26:46.74  39m qemu-kvm
12508 qemu      20   0 1435m 737m 4968 S  0.0  1.1  24:07.60  37m qemu-kvm
 8197 qemu      20   0 1449m 752m 4968 S  0.0  1.2  23:15.54  37m qemu-kvm
 7394 qemu      20   0 1444m 745m 5008 S  0.3  1.2  22:20.29  36m qemu-kvm
 7783 qemu      20   0 1435m 739m 4996 S  0.0  1.1  24:02.63  36m qemu-kvm
14733 qemu      20   0 1448m 753m 5000 S  0.3  1.2  28:58.61  35m qemu-kvm
14323 qemu      20   0 1448m 750m 4968 S  0.0  1.2  26:02.34  35m qemu-kvm
 9381 qemu      20   0 1426m 728m 4968 S  0.0  1.1  23:27.13  35m qemu-kvm
 5472 qemu      20   0 1443m 743m 4968 S  0.3  1.2  22:14.22  35m qemu-kvm
13293 qemu      20   0 1428m 727m 4968 S  0.0  1.1  24:51.03  34m qemu-kvm
11697 qemu      20   0 1449m 756m 4968 S  0.0  1.2  24:46.59  33m qemu-kvm
 4566 qemu      20   0 1432m 747m 5008 S  0.0  1.2  23:28.19  30m qemu-kvm
 9752 qemu      20   0 1439m 743m 4968 S  0.3  1.2  22:56.10  30m qemu-kvm
 6533 qemu      20   0 1438m 747m 4968 S  0.0  1.2  22:38.61  30m qemu-kvm
 6234 qemu      20   0 1418m 724m 4968 S  0.3  1.1  23:14.90  28m qemu-kvm
    1 root      20   0 19232 1524 1232 S  0.0  0.0   0:02.86    0 init
Run Code Online (Sandbox Code Playgroud)

现在你可以看到 qemu-kvm 正在交换。这些盒子运行最新的操作系统更新。另请注意,那里有很多可用的可用 RAM。

如何完全防止交换?这让我很恼火,考虑到我有更多这样的服务器而且有些服务器从不交换,这更令人困惑。曾经。

小智 6

vm.swappiness = 0并不能完全阻止交换。要完全关闭交换,您可以swapoff -a使用 root 权限发出命令。然而,完全禁用交换通常是不安全的——当出现内存不足的极端情况时,系统可能会崩溃。此外,swapoff操作本身从交换(慢)复制到 RAM,因此它可能与实际交换一样影响性能。

尽管有明显的“空闲”内存,但内核倾向于交换长时间不活动和消耗内存的进程。这为缓存释放了 RAM,从而提高了响应能力。除非您有性能下降的真实证据,否则我建议您不要担心并喜欢内核;)

  • 正如这里提到的( https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/ ),在现代内核中, vm.swappiness = 0 具有新的含义;它将关闭交换(实际上) (2认同)
  • @ϹοδεMεδιϲ 这必须在某处进行修改,因为即使使用最新的内核交换性 0 也不会阻止交换 (2认同)