Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在尝试利用 COW 并在 Linux 系统内存允许的范围内分叉尽可能多的子进程。我会启动父进程,直到分叉部分(此时进程正在使用一定数量的内存),然后一次分叉一个子进程,直到 fork 返回 ENOMEM 错误。在这种情况下,我会等待任何一个孩子完成后再分叉一个新的。子进程不会分配任何新内存,只会工作。但这不起作用,我的所有进程都被Linux系统杀死,没有任何内存错误。
最好的方法是什么?
根据 COW 的定义,这是不可能的。
您的进程可能没有显式分配内存,但它们肯定是隐式分配的。当进程试图修改标记为写时复制的页面时,操作系统需要暂停操作并分配新页面。此分配可能会失败,并且您的程序中没有地方可以返回错误。唯一可能的操作是终止该进程。
您可以做的最好的事情是估计您的程序在其高峰期需要多少内存,并将此信息与可用内存信息(例如来自/proc/meminfo)结合起来。
完全禁用 COW 的激进解决方案也应该有效,但 AFAIK Linux 没有此选项。