强制进程仅使用交换内存?

强制进程仅使用交换内存?

我有一个自定义程序,用于对某些数据进行分析。这是一个非常耗费内存的操作,可能会使用数千 GB 的 RAM。我的电脑只有 16GB 的 RAM,所以我唯一的解决方案是在大硬盘上使用交换内存。

我已经设法做到了这一点,而且效果很好,但是这个过程首先会占用我所有的实际 RAM,然后才开始使用交换空间。这使得我的电脑在执行操作的很长一段时间内完全无法使用。这也使得监控​​操作变得困难,因为一切都变得非常缓慢和无响应。

那么 Linux 中有没有办法强制单个进程仅使用交换空间中的内存?(无需实现自定义分配器)

理想情况下,我可以让程序在后台运行(可能持续几天或几周),同时仍然可以访问计算机。为程序增加约 16GB 的 RAM 似乎不值得失去计算机好几天。

答案1

那么 Linux 中有没有办法强制单个进程仅使用交换空间中的内存?(无需实现自定义分配器)

不,这是不可能的。进程无法在交换区上运行;它必须始终先将内存页从交换区加载到物理内存,然后进程才能继续运行。

因此,您需要告诉系统限制进程的资源,例如通过cgroups,正如卡米尔的评论所建议的那样,或者我会尝试prlimit (1),设置这两个限制中的第一个或两个:

  • 最大驻留集大小 (RSS) - 整个进程在物理 RAM 中占用多少内存
  • 最大锁定内存地址空间 - 可以在 RAM 中固定多少内存而不会被换出。

相关内容