您好,登錄后才能下訂單哦!
最近遇到了一個程序運行時間長后,操作系統由于out of memory 導致系統的oom-killer將程序直接殺死的問題:
錯誤提示大概為:
Out of memory: Kill process 20011 (main) score 58 or sacrifice child
Killed process 20011 (main) total-vm:21688384kB, anon-rss:715844kB, file-rss:816256kB
這些錯誤可以在linux系統的/var/log/syslog文件中找到
這涉及到oom-killer的問題,具體詳見:http://blog.csdn.net/gugemichael/article/details/24017515
解決方法1:
修改/proc/sys/vm/lowmem_reserve_ratio文件,即:echo 512 > /proc/sys/vm/lowmem_reserve_ratio
1、malloc是分配虛擬地址空間,如果不memset或者bzero,那么就不會觸發physical allocate,不會映射物理地址,所以這里用bzero填充
2、每次申請的block大小比較有講究,Linux內核分為LowMemroy和HighMemroy,LowMemory為內存緊張資源,LowMemroy有個閥值,通過free -lm和
/proc/sys/vm/lowmem_reserve_ratio來查看當前low大小和閥值low大小。低于閥值時候才會觸發oom killer,所以這里block的分配小雨默認的256M,否則如果每次申請512M(大于128M),malloc可能會被底層的brk這個syscall阻塞住,內核觸發page cache回寫或slab回收。
解決方法2:(來自http://orax.blog.sohu.com/144138537.html)
調整3個虛擬內存參數:
l vm.min_free_kbytes=409600
l vm.vfs_cache_pressure=200
l vm.swappiness =40
調整MIN_FREE_KBYTES的目的是保持物理內存有足夠的空閑空間,防止突發性的換頁。Swapiness缺省為60,減少swapiness會使系統盡快通過swapout不使用的進程資源來釋放更多的物理內存。Vfs_cache_pressure的缺省值是100,加大這個參數設置了虛擬內存回收directory和i-node緩沖的傾向,這個值越大,回收的傾向越嚴重。調整這三個參數的目的就是讓操作系統在平時就盡快的回收緩沖,釋放物理內存,這樣就可以避免突發性的大規模換頁。
sysctl命令調整了三個參數:
#sysctl -w vm.min_free_kbytes=409600//我這里改的是3000000單位是k字節(因為我的內存為8GB),也就是cache頁最少要為3GB,小了就讓系統內核釋放物理內存
#sysctl -w vm.vfs_cache_pressure=200
#sysctl -w vm.swappiness=40
參數修改完畢后,進入/proc/sys/vm目錄,檢查這三個參數是否修改正確:
#cd /proc/sys/vm
#cat min_free_kbytes
#cat vfs_cache_pressure
#cat swappiness
參數修改完畢后,過了幾分鐘,1號節點上的空閑物理內存明顯回升。說明參數確實起作用了。上面的操作完成了對目前系統的調整,永久性的設置需要修改/etc/sysctl.conf參數文件。
cd /etc
#cp sysctl.conf sysctl.conf.save20080304
#vi sysctl.conf
添加如下內容:
#modify vm parameter
vm.min_free_kbytes=409600
vm.vfs_cache_pressure=200
vm.swappiness =40
解決方法3:
直接修改/proc/PID/oom_adj文件,將其置位-17,此時oom-killer選擇kill程序時,要保護的進程的score 值為0,score值越高,oom-killer就越會選擇該程序,將其殺死
echo -17 /proc/8163/oom_adj
解決方法4:(來自http://blog.csdn.net/tenfyguo/article/details/9409743)
直接關閉oom-killer
OOM Killer的關閉與激活方式:
# echo "0" > /proc/sys/vm/oom-kill
# echo "1″ > /proc/sys/vm/oom-kill
其他精彩文章文章
更多關于android開發文章
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。