low memory killer配置的思考

來源:互聯網
上載者:User

標籤:style   java   使用   strong   問題   cti   

OOM_ADJ
對於低記憶體的時候,我們總是想盡量殺掉background的app,盡量保留persist service(比如IME),讓前台app能夠流暢的運行。
1,background app的adj盡量設高一些,但是max和mini之前,盡量還是要保留一些差距,這樣讓系統可以逐步去kill進程,
而不是一次殺掉很多。一次殺掉很多app很容易造成系統卡頓。
2,previeous app和home launcer的adj一定要獨立出來,並且不能設定太低,previous app可能會佔用很多的記憶體。


SWAP
swap主要是閥值的設定,什麼時候去觸發swap。
swap的使用主要目標是,在為了保證前台app的正常運行,在記憶體不夠的情況作為一個補充。比如browser在小記憶體機器上
只能開啟2個page,如果開了swap,可以開啟5個page。
對於背景其他程式,不需要使用swap,因為swap畢竟會降低一些效能,而是盡量殺掉太慢來讓前台應用盡量的使用實體記憶體。

所以swap的閥值大於Persist service的adj比較合適,這樣保證必須的服務還存在,讓前台應用可以正常運行。


CMA
low memory killer在計算剩餘記憶體的時候,cma的確是個頭疼的問題。
cma不是任何時間可以隨意使用的,下一個時刻他可能就需要分配。

cma的使用,基本策略應該還是給前台app用,保證他的運行,對於後台app,不要計算cma為free。

如果當前app不需要使用到cma相關的驅動:
在後台app都被殺光的情況下,可以使用cma的記憶體。當啟動一個新的app的時候,這個app會變成previous app,
而當前記憶體又是低於previous app要求的free的,所以他會被kill,那麼cma的記憶體就被放出來了,不會出現問題。
如果當前的app會使用cma的記憶體:
比如當前activity不會使用,但是下一個acitivty可能就需要使用cma相關的驅動,這種情況下cma就無法使用了(或者只能使用部分),因為你不知道什麼時候系統會需要使用cma的記憶體。

是否有途徑可以知道當前app是否使用到cma相關的驅動,使用了多少?
在相關的java類沒有被使用前是無法知道的,所以目前來看是沒法處理的。

那麼目前只能把cma當做一個節省記憶體的途徑來使用了。






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.