如何减少使用swap?

如何减少使用swap?

我使用 SSD 交换只是为了避免内存满相关的崩溃。 SSD 上可能发生的擦除次数有限。与内存相关的崩溃已经停止,但我的系统不断使用交换,并且vmstat几乎在任何时间段都显示 si 等 != 0。我已经改变了我的/etc/sysctl.conf尝试减少交换的使用并增加转储缓存的压力,但我仍然当有 Gb 可用内存时使用 find swap。

我已经做了一些更改来尝试减少交换使用:

$ cat /proc/sys/vm/swappiness
1
$ cat /proc/sys/vm/vfs_cache_pressure
200

这里有一个临时解决方案,可以强制交换到缓存中问个ubuntu问题,但是当我不主动监视内存时,这没有用。

操作系统:Pop 20.04 focus,内核:x86_64 Linux 5.11.0-7612-generic

答案1

我建议你更深入地研究潜在的问题,你的问题真的尝试解决以及其他解决方案问题。或者至少,更好地了解操作系统如何利用交换空间。

许多人错误地认为只有当空闲 RAM 可用时才会使用 SWAP 空间。需要的。一般来说(我不确定 Linux 内核!),具有交换空间的操作系统会交换它认为最近没有使用过的 RAM 块访问过:很少有算法会检查交换是否正确需要的因为 RAM 已满,仅当 RAM 最近未被使用过时访问过。因此,如果您让系统闲置一段时间,由于系统一直处于闲置状态并且某些程序没有访问其部分内存空间而导致 RAM 未被访问,那么操作系统仍会换出该 RAM 的部分内容,即使仍然存在充足的免费内存。

这个问题说明了这一点询问 Ubuntu,用户体验到操作系统将大部分 RAM 交换为交换空间,同时让系统闲置数天,然后在返回并再次使用系统后一段时间会遇到系统性能不佳的情况,并且操作系统正在尝试恢复已使用/已访问的内存块RAM 再次被定期访问。

一种方法(如果可以的话)是根本不使用 SSD 作为交换空间。在我的桌面上,我有一个旧的 500GB 非 SSD 硬盘,其中有一个我使用的交换分区。

另一种方法是性能权衡:为每分钟运行一次并检查 RAM 使用情况的脚本创建一个 cron 作业。当 RAM 使用率高于 60% 时,它会swapon(使用适当的参数)使用交换区文件如果需要的话。当 RAM 使用率回落到 40% 以下时,它会swapoff禁用交换文件的使用,并让操作系统将交换“排空”回物理 RAM。当然,您需要一个先前创建并正确初始化的交换文件来启用/禁用。 (并使阈值不同......如果你将它们设置为相同的值,例如 50%,你会遇到殴打当 RAM 使用率徘徊在略高于 50% 和略低于 50% 之间时。根据您通常使用系统的方式微调这些值。)

我确信其他人也使用了其他方法和技术。同样,随着 SSD 驱动器的使用增加,除非绝对需要,否则内核算法可能会被修改以减少使用基于 SSD 的交换分区。

相关内容