我有一台运行Ubuntu Quantum的桌面,使用OpenStack Folsom,配备32 GB RAM和2 GB交换的Intel i5。 我运行7个虚拟机,每个虚拟机的大小都像EC2 m1.small,所以每个虚拟机的内存都是1.7 GB。 我正在使用KVM。
当我开始同时运行5或6时,主机开始交换它们:
top - 23:45:42 up 3 days, 1:51, 10 users, load average: 0.37, 0.75, 1.15 Tasks: 418 total, 2 running, 413 sleeping, 3 stopped, 0 zombie %Cpu(s): 8.8 us, 2.1 sy, 0.0 ni, 88.8 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem: 32864580 total, 32586956 used, 277624 free, 574236 buffers KiB Swap: 1998844 total, 1113352 used, 885492 free, 16498252 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24652 libvirt- 20 0 4169m 1.7g 7756 S 3.6 5.4 4:49.37 kvm 25233 libvirt- 20 0 4450m 1.6g 7756 S 1.2 5.2 4:35.12 kvm 25589 libvirt- 20 0 4163m 1.6g 7756 S 2.4 5.1 4:40.31 kvm 6562 root 39 19 2935m 658m 7460 S 0.0 2.1 100:05.62 java 28393 libvirt- 20 0 4149m 624m 7756 S 0.0 1.9 2:25.01 kvm 28106 libvirt- 20 0 4170m 617m 7756 S 0.0 1.9 2:18.17 kvm 26519 libvirt- 20 0 4167m 590m 7756 S 0.0 1.8 2:22.16 kvm 29399 libvirt- 20 0 4159m 589m 7756 S 0.0 1.8 2:19.94 kvm $ free -m total used free shared buffers cached Mem: 32094 31868 225 0 559 16175 -/+ buffers/cache: 15134 16959 Swap: 1951 1087 864 # /tmp/swap-used.sh |grep kvm PID=944 - Swap used: 0 - (kvm-irqfd-clean ) PID=24652 - Swap used: 102468 - (kvm ) PID=25233 - Swap used: 108644 - (kvm ) PID=25589 - Swap used: 155768 - (kvm ) PID=26519 - Swap used: 192216 - (kvm ) PID=28106 - Swap used: 150796 - (kvm ) PID=28393 - Swap used: 208488 - (kvm ) PID=29399 - Swap used: 187388 - (kvm )
我已经尝试将交换次数设置为20,然后是10,最后设置为0,但是没有任何区别:
# cat /proc/sys/vm/swappiness 0
我没有重新启动主机,因为从60更改为0(我需要重新启动)? 我也用/sbin/swapoff -a; /bin/swapon -a完全关掉了swap /sbin/swapoff -a; /bin/swapon -a /sbin/swapoff -a; /bin/swapon -a 。 立即重新启用交换后,我看到这样的:
$ vmstat 5 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 2 0 11384 247572 652736 16539748 11 10 291 228 13 12 7 3 87 3 0 0 12968 234360 652756 16554432 0 317 8576 1240 3508 5470 17 2 75 5 1 0 17068 243512 652768 16559508 0 820 9448 1216 3687 4845 20 2 77 2 1 0 20040 233300 652772 16576152 0 594 12262 677 4436 5063 29 2 68 1 1 0 22764 219156 652792 16594448 6 546 11962 727 3870 4559 28 1 68 2 3 0 40832 229384 652776 16602440 0 3614 58404 4176 2051 6231 21 2 66 10 1 0 52420 232236 652784 16613320 0 2318 42174 2512 1819 4026 15 2 77 6
我有15 GB的可用内存,可以使用没有进程换出。
我有15 GB的可用内存,可以使用没有进程换出。
不,你不知道。
total used free shared buffers cached Mem: 32094 31868 225 0 559 16175
你有225MB的内存空闲。
KiB Swap:1998844总共,1113352个使用,885492个免费,16498252个高速caching
看看系统所做的一切美妙的caching,部分是通过将珍贵的内存中没有使用的垃圾。 你为什么要把它浪费在珍贵的RAM上?
如果RAM中有1GB的数据在几个小时内就没有被使用,这更有意义:
当你不忙的时候,把它交换到磁盘上,并且有1GB的caching可供使用。
你把它保存在内存中。 你有1GB的caching使用,如果这个内存是其他东西所需要的,你将不得不在交换时,你忙。
但是如果你认为你比编写你的操作系统的内存pipe理逻辑的人更了解内存pipe理,那就继续尝试去find那个“更快更好”的魔术。