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

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

我有几个CentOS6.5 x64 服务器,配备 64 GB RAM,运行大量虚拟机 VPS

有些服务器根本没有使用交换空间,而有些则有。我已将交换空间设置为零。但是,有些服务器即使有大量可用内存,仍会使用交换空间。

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

这是输出top按交换顺序排列(Op Enter):

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

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

我怎样才能完全防止交换?这让我很烦恼,而且更令人困惑的是,我还有更多这样的服务器,而且有些服务器从不交换。永远。

答案1

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

尽管有明显的“空闲”内存,但内核往往会换出长期不活动且占用内存的进程。这样可以释放 RAM 用于缓存,从而提高响应能力。除非您有性能下降的真正证据,否则我建议您不要再担心并爱上内核 ;)

相关内容