我通过 VMWare Server (2.0.0) 在 Ubuntu Desktop Linux (8.04) 主机上运行单个 Windows XP 来宾实例。当我最初启动来宾时,它为进程放置了大约 1.2GB 的内存(观察顶部的 vmware-vmx 的 RES 列)。在 vm 运行 15 或 20 分钟后,常驻内存下降到 ~80MB,其余的则用于交换。作为参考,VIRT = 1746m,RES = 79m,SHR = 63m。我已经为 XP 来宾分配了 1GB 的内存,但现在几乎所有这些都在交换中。
如您所料,此时 VM 的性能变得相当缓慢。做几乎任何事情都会导致颠簸。要将性能恢复到可接受的水平,必须关闭 VM,然后重新启动。定期重启不是一个好主意,因为在启动过程中必须换回很多东西。
所以,我的问题是如何防止我的 Linux 主机将所有这些内存推送到交换?主机是带有 Intel Q6600 处理器和 4GB 内存的 Dell Optiplex 755。它根本没有被征税,如果我能弄清楚怎么做,我可以轻松地将 2GB 内存固定到这个 XP 虚拟机上。
我已阅读有关 swappiness 内核参数的信息,并已在 /etc/sysctl.conf 中将 vm.swappiness 设置为 0(并重新启动),希望这会有所帮助,但似乎没有任何区别。我也尝试过 vm.overcommit_memory = 1 ,但这似乎也没有多大作用。
有人有什么建议吗?
在 VMWare 服务器控制台的主机设置中,有一个选项可以调整内存/交换使用。选项是“all in RAM”、“allow some swap”和“allow as much swap as needed”。
实际上,除了内核之外,没有办法强制进程留在 ram 中(vm 是进程)......
首先,你真的需要避免交换吗?perf 问题、io 问题等……如果不是像你一样。
但是你可以做一些调整。如果您确定有足够的 ram,请将 swapiness(内核选项)设置为较低的值(即 10-15)。如果我没记错的话,默认是 60。
查看http://peterkieser.com/technical/vmware-server-issues/的“Linux 2.6 主机 I/O 性能”
它应该有一点帮助。
但要明白,你想做的事没有魔术。所有操作系统都应该进行交换,并且它们会尽可能地尝试。