簡體   English   中英

根據可用空閑內存控制派生多少子進程

[英]controlling how many child process forked based on available free memory

我試圖利用COW並在Linux系統內存允許的范圍內派生盡可能多的子進程。 我將啟動父進程,直到派生部分(此時該進程正在使用一定量的內存),然后一次派生一個孩子,直到派生返回ENOMEM錯誤。 在這種情況下,我會等所有孩子完成后再分叉一個新孩子。 子進程不會分配任何新的內存,而是可以正常工作。 但這是行不通的,我的所有進程都被Linux系統殺死,沒有任何內存錯誤。

最好的方法是什么?

根據COW的定義,這是不可能的。

您的進程可能沒有顯式分配內存,但是它們肯定是隱式分配的。 當進程嘗試修改標記為寫時復制的頁面時,操作系統需要暫停操作並分配新頁面。 此分配可能會失敗,並且程序中沒有位置向其返回錯誤。 唯一可能的措施是終止進程。

您能做的最好的事情就是估計您的程序在高峰期將需要多少內存,並將此信息與空閑內存信息結合起來(例如,從/ proc / meminfo獲取)。

完全禁用COW的根本解決方案也應該可行,但是AFAIK Linux沒有此選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM