我们有一台 Linux 机器,其中交换分区有时会被填满。仍有足够的可用 RAM,因此不存在内存不足的风险。
发生完全交换时,通常的操作过程是执行 aswapoff -a && swapon -a
以完全清除交换。
我的问题:
- 完整的交换分区是一个首先需要注意的问题,还是它是一个“正常”的问题,可以忽略不计。
- 关闭然后再次打开交换是一件好事,还是会使情况变得更糟,因为内核现在正忙于清理交换空间?
- 更好(或最好)的反应方式是什么?
答案1
清除交换区没有必要也没有用。读linuxatemyram。
内核有一个相当高效的页面缓存。因此,RAM 用于存储有用的数据(例如最近访问的文件段块或堆内存),而不太有用的数据则被交换到交换区。
也许你的交换区太小了。你也可以交换到某个文件。参见这。
答案2
根据我的经验,只有在内存使用率很高的情况下才会发生完整交换分区。在这种情况下,禁用交换可能会出现问题,因为可能没有足够的内存来从交换加载所有内容。
如果您尝试在可用内存不足的情况下禁用交换区,系统可能会变得无响应或开始终止进程以释放内存。
如果内存使用率一直很高,后来又下降,则交换利用率可能很高,但我会惊讶地看到它为 100%,因为无论什么原因导致内存被释放,也可能释放了至少几页交换。
如果在内存使用量已经下降后禁用交换,则禁用交换可能不会导致很多问题。但我也不认为您正在做任何对系统性能有益的事情。
每当我看到具有完整交换的系统时,我就能够通过添加更多交换来提高性能。
答案3
正如其他答案所说,手动清除交换并不是一个好主意。但是,如果您注意到交换区和内存都已完全填满,并且其他程序因此而无法运行,则可能存在问题。
在这种情况下,请htop
通过单击 运行并按内存使用情况排序MEM%
。这将使您能够找到使用大量内存的程序。如果您发现某些东西似乎不适合那里(例如,一个小实用程序),请转向谷歌并尝试找出该程序是否存在已知的内存泄漏。这不太可能,但有可能发生。
就我而言,我发现 i3 通知管理器邓斯特有内存泄漏这是已知的并已修复,但修复版本不在我的发行版存储库中。