我有一個與內存泄漏有關的查詢。內存泄漏對其他進程的影響
一個32位Linux的系統上運行多個活動進程A,B,C,d。所有進程都從堆中分配/釋放內存。現在如果進程A確實泄漏了大量內存,是否會發生這樣的情況:在一段時間之後,進程B無法從堆中找到要分配的內存?
按我理解,每個進程從OS具備2GB的unque VM。但是虛擬機和物理內存之間存在一個映射。
我有一個與內存泄漏有關的查詢。內存泄漏對其他進程的影響
一個32位Linux的系統上運行多個活動進程A,B,C,d。所有進程都從堆中分配/釋放內存。現在如果進程A確實泄漏了大量內存,是否會發生這樣的情況:在一段時間之後,進程B無法從堆中找到要分配的內存?
按我理解,每個進程從OS具備2GB的unque VM。但是虛擬機和物理內存之間存在一個映射。
Linux內核默認完成了內存過量使用。 當進程使用malloc()請求一個內存段時,內存不會自動分配。 您可能有4個進程malloc(),每個進程2gb,沒有任何問題。 當進程使用(初始化,bzero,複製)malloc()ed內存時,會出現問題。 你甚至可以爲系統預留malloc更多的內存,沒有任何問題,malloc()甚至不會返回NULL!
是的,如果虛擬機(RAM +交換空間)的總數量被進程A耗盡,那麼其他任何進程中的malloc
可能因此而失敗。 Linux從其他進程隱藏進程的內存空間,但它不會在您的機器中奇蹟般地創建額外的內存。 (儘管它看起來可能是因爲其overcommit行爲。)
此外,Linux可能會在內存不足時使用其OOM殺手。
好的。但是,這是個問題嗎? – dAm2K
問題是malloc是否可以在進程B,C,D中失敗? – Bidyut