3
我的應用程序在嵌入式Linux中運行數小時,突然間OOM Killer跳出。雖然overcommit_memory設置爲2,但OOM殺手罷工
我設置了overcommit_memory=2
和overcommit_ratio=50
來挑起這種情況並且發現可能的泄漏,但是OOM Killer仍然出現!
爲了檢查我的設置是否有效,我要求一個大的malloc,當我設置overcommit_memory=2
時它確實返回零。
那麼,爲什麼OOM殺手仍然開始,我能做些什麼來調查問題的根源呢?
我也檢查了(在dmalloc庫的幫助下),我沒有吃內存。 malloc日誌顯示,有同樣數量的內存的回收和返回的不斷進程,即沒有問題似乎是... – leonp
我所能想到的是或許'malloc'以外的其他東西正在吃內存。某種幕後的緩衝或某種東西。 'ps'對過程的內存使用情況有什麼看法? –
謝謝,湯姆!你擊中目標! 問題出在Linux I/O緩衝區控制機制。當我們將等待緩衝區的百分比設置爲10(默認爲40)時,這解決了問題,現在我們已經運行了6天,沒有問題。 – leonp