我运行了一个进程,它几乎用完了我所有的 RAM 和交换空间……我被迫终止该进程,但现在我发现了一些奇怪的事情,我的交换空间使用率已经减少了一点,但它仍然只使用了一半,而我的 RAM 几乎没有被使用……事实上,交换空间的使用量比 RAM 要多得多,尽管 RAM 使用率很低,但我的电脑运行速度很慢,我猜想这与交换空间水平仍然很高有关?如果是这样,如果它没有自动清除交换空间,我该如何清除它?或者我该怎么做?我已经看过了这个问题,它似乎不仅仅谈论 Swap,而且我不想影响 RAM,所以解决方案是清除 Swap,但只有 Swap......
上次发生这种情况时,我被迫重新启动我的机器,但我必须这样做。我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10。
答案1
一旦数据进入交换区,即使内存再次开始释放,数据仍会停留在那里,这是很正常的。这是好事,无需担心。
由于硬盘访问速度明显慢于内存,因此当系统认为对系统性能或稳定性而言没有必要时,系统会避免将数据交换进或交换出交换区。因此,只有当系统内存不足或磁盘缓存压力很大时,数据才会进入交换区,并且系统认为将数据放入交换区的耗时过程将带来更好或更可靠的系统性能。
将数据从交换区移出(至少对于传统硬盘而言)与将数据放入交换区一样耗时。因此,如果数据实际上未被使用,系统将不愿意从交换区移除数据。如果数据在交换区中且未被使用,那么将其保留在交换区中实际上是件好事,因为它可以为正在使用的其他内容留出更多可用内存,从而可能加快系统速度。
完全避免交换的最佳方法是尽可能购买更多物理 RAM。交换时,您的系统会利用其拥有的物理内存量为您提供最佳性能。
尽管如此,如果您确定导致交换的低内存/高缓存事件不会再次发生并且您不介意等待,则可以使用以下命令强制系统释放其所有交换数据。
sudo swapoff -a
sudo swapon -a
这将禁用然后重新启用交换,并在此过程中强制将数据移出。如前所述,这样做可能没有真正的理由 - 除了好奇或查看交换如何工作之外。
答案2
当需要时,交换出的数据又被带回来,这种缓慢现象很快就会自行消失。只要您有足够的空闲内存,它就不会再次被交换出去,但大量您未访问过的其他数据可能仍留在交换中,等待您再次真正需要它。
答案3
答案4
清除交换分区不会对计算机的运行速度产生任何影响,除非您认为某些行为不当的程序将一些敏感数据(例如密码)保存在交换内存中,而这些数据可能最终存储在交换分区中,否则无需清除交换分区。如果您不需要从交换分区中清除潜在的敏感数据,则一旦交换分区恢复运行,您就无需手动清理或格式化交换分区。
您的系统感觉缓慢的最可能原因是系统实际上快要耗尽 RAM。即使系统监视器显示系统仍有可用内存,也可能会发生这种情况,因为内存需求往往是零星的,并且可能仅需要不到一秒的时间来使用内存,并且不会显示在任何缓慢刷新的系统监视器中。
最简单的方法是打开终端并运行命令sudo vmstat -SM 10
(您可能需要vmstat
先运行来安装sudo apt install vmstat
):
输出将如下所示(每 10 秒出现新行):
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 1609 6565 13230 0 0 88 195 17 178 44 10 45 1 0
1 0 0 1599 6565 13232 0 0 0 226 4621 18688 22 6 72 0 0
4 0 0 1566 6565 13234 0 0 0 67 5217 20819 27 7 65 1 0
2 0 0 1533 6566 13241 0 0 0 847 6021 23359 35 6 58 0 0
您要监视的字段是swap
si
和,so
表示 10 秒内兆字节数换入(从交换设备到 RAM)或换出。通常,这so
不会影响系统速度,但si
会导致速度变慢,这是因为系统的 RAM 太小,无法运行您尝试并行运行的进程。可能的解决方案是 (1) 关闭您正在使用的一个或多个应用程序,或 (2) 获取更多物理 RAM。
按Ctrl+C退出vmstat
。
请注意,vmstat
无法判断系统是否在短时间内接近零可用内存,因此free
,即使内存很慢,也可能会出现很大的数字。buff
可能是唯一可以确定您的内存是否耗尽的程序,但该程序很难配置(但并非不可能 - 只需安装它并启动)。cache
sar
man sar