中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ubuntu 解決cache逐漸變大導致oom-killer將某些進程殺死的情況

發布時間:2020-06-10 00:00:19 來源:網絡 閱讀:3603 作者:dyllove98 欄目:移動開發

最近遇到了一個程序運行時間長后,操作系統由于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 KSOAP2調用.net webservice

jQuery教程(8)-DOM樹操作之使用反向插入方法

android學習筆記(34)使用AlertDialog創建簡單對話框

android學習筆記(33)畫廊視圖(Gallery)的功能和用法

android navidgation drawer 在導航抽屜中如何改變List選中項的...


更多關于android開發文章


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌珠穆沁旗| 铁力市| 万州区| 双峰县| 大化| 筠连县| 益阳市| 池州市| 镇沅| 民权县| 平度市| 交城县| 孝昌县| 涞水县| 乐安县| 康马县| 垣曲县| 樟树市| 内乡县| 三原县| 莎车县| 佛学| 襄汾县| 伊川县| 胶州市| 筠连县| 云安县| 景德镇市| 郑州市| 海兴县| 宜兰市| 白玉县| 肥西县| 彩票| 怀集县| 滕州市| 汉沽区| 安岳县| 临汾市| 堆龙德庆县| 宜昌市|