暂停/恢复磁盘上的单个进程

暂停/恢复磁盘上的单个进程

有时,我们希望暂停 Ubuntu 和 OS X 服务器上的内存密集型进程,以暂时释放一些 RAM 用于其他作业。如果我们只担心 CPU 使用率,那么一个简单的方法Ctrl-Z就可以了。但是,我们需要能够释放 RAM(通过将其写入磁盘),然后重新启动进程(磁盘 -> RAM),或者换句话说“休眠”单个进程。有关如何执行此操作的任何线索? (最好来自 CLI。)谢谢。

答案1

您要查找的术语是“应用程序检查点”。

我知道可以做到这一点的工具有 CryoPID 和冷冻PID2

这两个工具仅适用于 Linux。

我不知道 BSD 或 OS X 上有类似的工具。

答案2

没有通用的工具可以休眠单个进程,只能休眠整个系统。

但是,如果您不关心进程映像在重新启动后无法保存,则可以使用一个内置工具将进程映像保存到磁盘:交换。确保有足够的交换空间,如果存在内存压力并且进程不活动(例如因为它被挂起),则其内存将被换出。

如果您知道该进程可能会长时间处于不活动状态,并且在某个时刻需要快速响应时间,则可以通过在一个进程中分配大量 RAM 来强制释放大量 RAM。短期过程,例如

perl -e '$tmp = "a" x 999999999' # allocate about 1GB

您无法控制换出的内容,因此其他进程可能会被换出。在 Linux 上,您可以通过强制访问进程映射的页面来将进程换回。脚本在这个答案将执行此操作:将进程映射的所有页面加载到内存(请注意,这包括打开的文件;您可以根据映射信息有选择地遍历区域,以避免交换您知道不需要的数据,请参阅这个答案了解更多信息)。

答案3

确保您有足够的交换空间。确保您的系统设置为优先交换非活动页面(虚拟机交换=100)。那么就足以暂停该进程了。内核将优先将不活动的页面交换出去。

答案4

在 Mac OS X 上,您可以尝试使用purge命令(随 Xcode 提供)释放一些(不活动的)RAM。

vm_stat
purge
vm_stat

相关内容