2011-07-24 26 views
3

我的應用程序在嵌入式Linux中運行數小時,突然間OOM Killer跳出。雖然overcommit_memory設置爲2,但OOM殺手罷工

我設置了overcommit_memory=2overcommit_ratio=50來挑起這種情況並且發現可能的泄漏,但是OOM Killer仍然出現!

爲了檢查我的設置是否有效,我要求一個大的malloc,當我設置overcommit_memory=2時它確實返回零。

那麼,爲什麼OOM殺手仍然開始,我能做些什麼來調查問題的根源呢?

+0

我也檢查了(在dmalloc庫的幫助下),我沒有吃內存。 malloc日誌顯示,有同樣數量的內存的回收和返回的不斷進程,即沒有問題似乎是... – leonp

+0

我所能想到的是或許'malloc'以外的其他東西正在吃內存。某種幕後的緩衝或某種東西。 'ps'對過程的內存使用情況有什麼看法? –

+1

謝謝,湯姆!你擊中目標! 問題出在Linux I/O緩衝區控制機制。當我們將等待緩衝區的百分比設置爲10(默認爲40)時,這解決了問題,現在我們已經運行了6天,沒有問題。 – leonp

回答

0

因此,問題的答案是:使用sysctl調整VM的值。基本參數是overcommit_ratio和dirty_ratio。 更新:2009年以後的Linux版本以字節爲單位進行更精確的調整,而不是百分比。