为什么当有足够的可用内存时,ubuntu 会使用交换?

为什么当有足够的可用内存时,ubuntu 会使用交换?

在运行 Virtual Box 时,我的系统大量访问硬盘并且运行缓慢。

当我使用系统监视器检查系统资源时,它显示处理器使用率为 15%,RAM 使用率为 65%,交换使用率为 50% 左右。

我的问题是,当有足够可用的主内存时,为什么 ubuntu 需要使用 Swap?

编辑 -

命令输出free-

             total       used       free     shared    buffers     cached
Mem:       4075908    3056931    1018977          0       1944     308408
-/+ buffers/cache:    2746579    1329329
Swap:      4139004    1862551    2276453

笔记 -12.04 Precise在我升级到 之前,虚拟盒似乎运行良好12.10 Quantal。现在它太慢了,几乎没用。

答案1

swappiness 参数控制内核将进程从物理内存移出并移至交换磁盘的趋势。由于磁盘比 RAM 慢得多,因此如果进程过于频繁地移出内存,这会导致系统和应用程序的响应时间变慢。

swappiness can have a value of between 0 and 100
swappiness=0 tells the kernel to avoid swapping processes out of physical memory for as long as possible
swappiness=100 tells the kernel to aggressively swap processes out of physical memory and move them to swap cache 

Ubuntu 中的默认设置是 swappiness=60。降低 swappiness 的默认值可能会提高典型 Ubuntu 桌面安装的整体性能。

来源:SwapFaq - Ubuntu 维基

在启动 virtualbox 之前打开终端并粘贴此内容:

    sudo sysctl vm.swappiness=10

启动可视化并检查交换使用量是否减少,如果是的话,则在终端中执行以下命令:

    gksu gedit /etc/sysctl.conf

它会要求您输入密码,输入密码后屏幕上会出现一个文本编辑器,一直向下滚动并在最后一行后添加:

    vm.swappiness=10

保存文件并重新启动计算机。

这应该够了吧!

答案2

但是你有足够的内存。在第一列中,可用的总内存量为 4075908。除缓存和缓冲区外,程序实际使用的内存量为 2746579。交换中的 RAM 量为 1862551。

这意味着实际使用的内存量为 2746579+1862551,等于 4609130。通常,完整的内存块和分配给程序的内存都会被换出,这是最有效的方式。

底线是,您需要比实际拥有的 RAM 多 4609130-4075908 或 533222 Mb。

查看您为当前正在运行的虚拟机分配了多少内存,以及您可能正在运行的其他程序对 RAM 的要求。有时少即是多 - 如果您减少分配给虚拟机的 RAM 量,那么您将不会进行交换,性能将好得多。

相关内容