我的电脑上安装了 Ubuntu 18.04,总内存为 8GB,安装 Ubuntu 时我留出了 2GB 的交换空间。正常运行时,它使用主内存约 2GB,交换空间为零。
我的问题是,当我运行内存处理过程时,它会在耗尽所有可用主内存后开始使用交换空间,但是当我完成内存处理过程时,即使主内存可用(以 GB 为单位),它仍会继续使用交换空间。由于交换空间的使用,我的 PC 在此操作后变慢了。因此,这将导致重新启动我的 PC 以恢复。
有没有办法修复这个问题,以便当主内存可用时我可以清除交换?或者这是一个错误?
答案1
一旦解决了交换问题,即使在运行了消耗内存的操作后恢复到大约 2 GB 的“正常”使用量,一些交换通常仍会继续使用。在使用内存处理过程后,许多其他进程将被交换到交换内存。当其他活动再次需要它们时,它们将被回收到 RAM。只要不需要它们,它们就会一直保留在交换中。通常,您应该会看到交换使用量逐渐减少,系统再次变得更快。
有一种方法可以更快地恢复正常。您可以通过关闭并重新打开交换来立即将所有进程从 SWAP “刷新”回主内存。这需要以下命令:
sudo swapoff -a
sudo swapon -a
答案2
TL;DR:对于这种情况,无需重置交换、重新启动或采取任何特殊措施。当您正常使用系统时,问题应该会自行解决。
这不是永久状态。随着内存压力的消退,您开始使用具有交换内存页面的应用程序,它们将根据需要“取消”交换并放回主内存。这是一次性的事情,当然它会暂时减慢您的系统和受影响的应用程序的速度。
通常,一些交换页面会保持交换状态,因为它们仍未使用。当应用程序错误地未能放弃不再使用的资源或获取比实际需要更多的资源时,就会发生这种情况。不过,从(虚拟)内存管理的角度来看,这在小范围内并不是坏事或问题;辅助内存充足且便宜,肯定比主内存更充足、更便宜,因此即使您有几 GB 的永久交换内存,也不会造成太大影响(除了您可能需要稍微增加交换空间并释放一些存储空间以用于其他目的)。