防止 Linux 进程被换出

防止 Linux 进程被换出

有谁知道有哪个 Linux 实用程序可以防止分叉进程中的所有内存被交换到磁盘?我见过“mlockall”调用,但破解应用程序听起来有点小题大做。

我需要这个的原因是我在我的 Linux 上网本上的 VirtualBox 下运行 Windows XP,而且我担心基本上有两个级别的交换,这对于单个小巧的上网本硬盘来说并不好……

答案1

对于单个过程而言,mlock我相信,它及其相关项是唯一的方法。

在整个系统范围内,您可能会发现通过调整“swappiness”可以获得更好的性能。尝试sysctl vm.swappiness读取值并将sysctl -w vm.swappiness=N其设置为N,其中是比当前值更小的数字。(如果您想极端一点,请尝试 0,告诉内核它应该始终优先于交换而驱逐缓存页面。)

答案2

如果它实际上“交换”(即磁盘变得非常繁忙),则系统需要更多内存。

如果 RAM 足够,操作系统将不会进行交换,除非调出一些“休眠”进程以释放更多的物理 RAM。

它没有直接回答您的问题,但也许您可以从安装启用 zram/cache 的内核中获得一些好处:它将为您提供一定数量的 RAM 支持的压缩页面缓存和交换。

这样,您的系统仍然会进行分页(“交换”),但大部分内容都会转移到 RAM,而且由于压缩,保存在物理 RAM(活动内存或 zcache 中)中的内存页数量将比您从正常的未压缩 RAM 中获得的更多。

答案3

您还可以控制系统开始使用交换内存的时间点。这将告诉您计算机中的当前值是多少:

cat /proc/sys/vm/swappiness

Linux 的默认值曾经是 60。粗略地说,这意味着当 RAM 的使用率只有 40% 时,计算机将开始使用交换分区。对于旧机器来说,这是一个安全的默认值。但是,如果您有足够的 RAM,则可以减少交换量。

即时:

sudo sysctl vm.swappiness = 10

sudo swapoff-a

sudo swapon-a

或者永久地将 vm.swappiness = 10 添加到 /etc/sysctl.conf (适用于 Debian)。

相关内容