0

我正在尝试利用 COW 并在 Linux 系统内存允许的范围内分叉尽可能多的子进程。我会启动父进程,直到分叉部分(此时进程正在使用一定数量的内存),然后一次分叉一个子进程,直到 fork 返回 ENOMEM 错误。在这种情况下,我会等待任何一个孩子完成后再分叉一个新的。子进程不会分配任何新内存,只会工作。但这不起作用,我的所有进程都被Linux系统杀死,没有任何内存错误。

最好的方法是什么?

4

1 回答 1

0

根据 COW 的定义,这是不可能的。

您的进程可能没有显式分配内存,但它们肯定是隐式分配的。当进程试图修改标记为写时复制的页面时,操作系统需要暂停操作并分配新页面。此分配可能会失败,并且您的程序中没有地方可以返回错误。唯一可能的操作是终止该进程。

您可以做的最好的事情是估计您的程序在其高峰期需要多少内存,并将此信息与可用内存信息(例如来自/proc/meminfo)结合起来。

完全禁用 COW 的激进解决方案也应该有效,但 AFAIK Linux 没有此选项。

于 2014-03-05T06:48:35.443 回答