内存不足是一个常见问题,官方的 OOM 效率不高。为了更快地完成查杀工作,还引入了其他几个程序。
我想知道为什么没有办法创建交换而不是杀死。考虑一个没有交换的系统,OOM 程序可以触发sudo swapon /swapfile
(假设swapfile
存在)而不是杀死进程。
实施这个想法有技术限制吗?
答案1
答案2
实施这个想法有技术限制吗?
不,您可以继续编写类似的程序。交换的问题是它非常慢,非常不可预测,它会增加延迟,它会妨碍正常的 IO 操作,并且在某些情况下它弊大于利,例如,如果您有一个应用程序,其 RSS 正在不受控制地增长:您尝试为了创建交换来满足其需求,内核会交换您实际使用的所有内容,然后系统就会停止运行。
我的建议始终是:添加 RAM 并且不要使用交换区。仅当您无法在物理(没有可用插槽的笔记本电脑)或财务(共享主机)限制之外添加 RAM 时,才必须使用交换。
在 Linux 中,交换区可用于休眠,但仅此而已。我什至不再相信休眠,因为该技术是为随机 IO 速度非常慢的 HDD 磁盘创建的。对于当今的 SSD,几乎没有理由使用休眠功能。
答案3
只需使用使用zram
这是页面的压缩存储。各种 Linux 发行版(例如卢本图,软呢帽)以及 ChromeOS 和 Android 多年来默认启用 zram。 Android 上甚至没有默认的传统交换功能。甚至视窗和苹果系统现在使用压缩虚拟内存在诉诸交换之前
默认情况下,zram 几乎不消耗内存,并且仅在数据分页后才采用压缩大小,因此,如果您不缺乏内存,那么 zram 就免费放在那里,就像您使用普通交换时一样。但是,当内存变得有限时,zram 将投入使用,并且它比交换快得多,因为 CPU 解压缩数据的速度比从 HDD 甚至 SSD 读取数据快得多。您可以检查基准测试结果在这里看看使用默认 lzo 算法的 zram 仍然比旧 SSD 更快。您可以轻松更改为lz4算法这是比 lzo 快近 5 倍压缩比稍低。如今只是切换到 Zstd速度会让你大吃一惊
还有zswap
它使用不同的机制,但仍然将压缩数据存储在 RAM 上