如何告诉 Linux 明确地换出暂停进程的主内存?

如何告诉 Linux 明确地换出暂停进程的主内存?

我运行一个内存密集型进程(mkcromfs),它消耗的内存比我笔记本电脑上的物理内存还多,所以它一直在进行分页、交换和抖动,并且 loadavg 大约为 2(compcache也已与通常的交换分区一起使用),但正在缓慢地向前移动(虽然我担心它最终会尝试分配 >2GB 并崩溃,从而耗费 2 天的抖动)。

当我想使用笔记本电脑做其他事情时,我会停止该过程,启动 X 服务器、Firefox 和其他程序。问题是,当我启动 Firefox 时,loadavg 会跳到 10,系统几乎完全没有响应(打开/关闭大写锁定的时间很长,鼠标光标位置更新缓慢,从 X 服务器切换到 Linux 控制台的速度很慢,登录速度很慢)。

停止的进程mkcromfs仍然占用大量内存(464.8 MiB,并且正在缓慢下降),只有当其他程序需要更多内存时才将其移动到交换区,这会导致速度大大降低。

如何告诉 Linux 完全交换出此进程(例如,我不打算在短期内恢复它),可能从交换其他数据中唤醒?另外,能够指定确切的交换设备来交换给定的进程也很有用(例如,mkcromfs内存在 ramzswap 中是无用的)。

更新:现在我只需从/dev/erandom并且tmpfs会使mkcromfs缩小。有没有更合适的方法?

答案1

您可以尝试使用 sysctl 的“swappiness”参数……如果我没记错的话,值越高,“交换的可能性”就越大。看一看这里

相关内容