![在 14.04 中闲置几个小时后,速度变得非常慢](https://linux22.com/image/1122660/%E5%9C%A8%2014.04%20%E4%B8%AD%E9%97%B2%E7%BD%AE%E5%87%A0%E4%B8%AA%E5%B0%8F%E6%97%B6%E5%90%8E%EF%BC%8C%E9%80%9F%E5%BA%A6%E5%8F%98%E5%BE%97%E9%9D%9E%E5%B8%B8%E6%85%A2.png)
我之前使用 12.04 没有任何问题,但自从我升级到 14.04 后,我注意到系统在执行 UI 任务时非常慢,当我第二天上班时(计算机保持开机状态),我输入密码,需要 1 分钟才能登录。
但是,top 或 htop 并没有显示出明显的 CPU 使用率。它太慢了,写这篇文章并在 word 中单击右键以让校正器工作需要 10 秒钟才能显示菜单,并且当我移动鼠标指针时会传送。
现在我已经关闭了 VirtualBox,情况好多了,所以我认为问题可能出在那里。
VirtualBox 是 4.3.10_ubuntu,VM 是 Win7,标记有“使用 3d 加速”。
但是由于 htop 没有显示明显的 CPU 使用率,您认为这可能是什么原因造成的?
答案1
VirtualBox 占用了您系统的太多 RAM,而且您不断进行交换。我修饰了图像以使其可见:
VirtualBox 的虚拟内存要求几乎与物理 RAM 的大小相同。
您为虚拟机分配了多少内存?根据我的经验,任何超过总物理 RAM 1/3 的东西都会带来麻烦和速度减慢。
其下的 java 进程也可能是问题的一部分(它有 2.8G!)---很有可能 VirtualBox 和该进程正在争夺 RAM 并一起进行活锁交换。
更详细地说:虚拟大小是进程已“映射”的内存,也就是说,它想它有 --- 只有其中的一部分在任何时候真正在 RAM 中,而这部分是标记为 RES(常驻)的部分。如果程序试图访问位于其虚拟池但不在 RAM 中的内存,并且内存已满,则必须换出其他内存以腾出空间给新内存。因此,如果您有两个进程的虚拟内存和常驻内存之间差异很大,那么这两个进程很可能在每次调度切换时都会换出另一个 --- 使系统变得缓慢 --- 交换内存可能百万比RAM慢。
这种情况在长时间不活动后发生,可能是因为系统已经在进程中确定了 RAM 的分区,或多或少满足了所有要求对于该工作量。当您再次更改工作负载类型时,程序的不同部分将被加载,交换狂潮开始。如果您等待必要的时间(可能是几个小时!),系统可能会或多或少找到另一个合适的平衡;这种暂时的平衡是不好的。
关于你的情况:
有 4G 的内存,有一个 1.5G 的虚拟机是可以的,如果它是系统中唯一占用大量内存的进程。大概是那一个和IDE有关太多了。
肮脏(且危险)的伎俩
要恢复响应系统,我知道的更快方法是强制关闭交换;但有时这很危险。基本思路是做一个
sudo swapoff -a
等待完成...
sudo swapon -a
这将尝试将所有内存放回 RAM。如果做不到,进程将在此过程中被无情地杀死。为了避免一些无辜且重要的系统进程死亡(1),最好的方法是尝试关闭占用大量内存的进程前进行交换。
(1)内核的 OOM(内存不足)杀手将尝试来终止正确的进程,但它并非万无一失。