我正在尝试利用COW和fork尽可能多的子进程,因为Linux系统内存允许。我将启动父进程,直到分叉部分(此时进程正在使用一定量的内存),然后一次分叉一个子进程,直到fork返回ENOMEM错误。在那种情况下,我会等到任何一个孩子完成之后再分配新的孩子。子进程不会分配任何新的内存,只是工作。但这不起作用,我的所有进程都被Linux系统杀死而没有任何内存错误。
最好的方法是什么?
答案 0 :(得分:0)
根据COW的定义,这是不可能的。
您的进程可能没有明确分配内存,但它们肯定会隐式地进行分配。当进程尝试修改标记为copy-on-write的页面时,操作系统需要暂停操作并分配新页面。此分配可能会失败,并且程序中没有地方可以返回错误。唯一可能的行动就是杀死这个过程。
您可以做的最好的事情是估计程序在峰值时需要多少内存,并将此信息与可用内存信息(例如来自/ proc / meminfo)结合起来。
完全禁用COW的根本解决方案也应该有效,但AFAIK Linux没有这个选项。