Linux內核--vm內存相關參數(shù)

查看方式:
1、sysctl -a
2、cat /proc/sys/vm/overcommit_memory

成都創(chuàng)新互聯(lián)成都網站建設按需定制制作,是成都網站制作公司,為成都陽臺護欄提供網站建設服務,有成熟的網站定制合作流程,提供網站定制設計服務:原型圖制作、網站創(chuàng)意設計、前端HTML5制作、后臺程序開發(fā)等。成都網站制作熱線:13518219792

一、overcommit_memory

內核源碼中的介紹:
This value contains a flag that enables memory overcommitment.
When this flag is 0, the kernel attempts to estimate(估算) the amount
of free memory left when userspace requests more memory.

When this flag is 1, the kernel pretends there is always enough
memory until it actually runs out.

When this flag is 2, the kernel uses a "never overcommit"
policy that attempts to prevent any overcommit of memory.

This feature can be very useful because there are a lot of
programs that malloc() huge amounts of memory "just-in-case"
and don't use much of it.

The default value is 0.

文件指定了內核針對內存分配的策略,其值可以是0、1、2
0: (默認)表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,并把錯誤返回給應用進程。0 即是啟發(fā)式的overcommitting handle,會盡量減少swap的使用,root可以分配比一般用戶略多的內存
1: 表示內核允許分配所有的物理內存,而不管當前的內存狀態(tài)如何,允許超過CommitLimit,直至內存用完為止。在數(shù)據庫服務器上不建議設置為1,從而盡量避免使用swap.
2: 表示不允許超過CommitLimit值

二、vm.overcommit_ratio

默認值為:50 (即50%)

這個參數(shù)值只有在vm.overcommit_memory=2的情況下,這個參數(shù)才會生效。

執(zhí)行grep -i commit /proc/meminfo
看到CommitLimit和Committed_As參數(shù)。
CommitLimit是一個內存分配上限,CommitLimit = 物理內存 * overcommit_ratio(默認50,即50%) + swap大小
Committed_As是已經分配的內存大小。

一般情況:
情況①
overcomot_memory = 0,vm.overcommit_ratio = 50 -----> max_num malloc size = 7.137890GB

情況②
overcomot_memory = 2 ,vm.overcommit_ratio = 50 -----> max_num malloc size = 3.958923GB

情況③
overcomot_memory = 2 ,vm.overcommit_ratio = 99 -----> max_nummalloc size = 6.722099 GB

三、vm.min_free_kbytes

cat /proc/sys/vm/min_free_kbytes centos6.4默認66M

67584

該文件表示強制Linux VM最低保留多少空閑內存(Kbytes)。

當可用內存低于這個參數(shù)時,系統(tǒng)開始回收cache內存,以釋放內存,直到可用內存大于這個值。

vm.vfs_cache_pressure

該項表示內核回收用于directory和inode cache內存的傾向:

缺省值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比

降低該值低于100,將導致內核傾向于保留directory和inode cache

增加該值超過100,將導致內核傾向于回收directory和inode cache。

vm.dirty_background_ratio默認為10

所有全局系統(tǒng)進程的臟頁數(shù)量達到系統(tǒng)總內存的多大比例后,就會觸發(fā)pdflush/flush/kdmflush等后臺回寫進程運行。
將vm.dirty_background_ratio設置為5-10,將vm.dirty_ratio設置為它的兩倍左右,以確保能持續(xù)將臟數(shù)據刷新到磁盤,避免瞬間I/O寫,產生嚴重等待(和MySQL中的innodb_max_dirty_pages_pct類似)

vm.dirty_ratio默認為20
單個進程的臟頁數(shù)量達到系統(tǒng)總內存的多大比例后,就會觸發(fā)pdflush/flush/kdmflush等后臺回寫進程運行。

vm.panic_on_oom 默認為0開啟 為1時表示關閉此功能

等于0時,表示當內存耗盡時,內核會觸發(fā)OOM~~~~ killer殺掉最耗內存的進程。

當OOM Killer被啟動時,通過觀察進程自動計算得出各當前進程的得分 /proc/<PID>/oom_score,分值越高越容易被kill掉。

而且計算分值時主要參照 /proc/<PID>/oom_adj , oom_adj 取值范圍從-17到15,當?shù)扔?17時表示在任何時候此進程都不會被 oom killer kill掉(適用于mysql)。

/proc/[pid]/oom_adj ,該pid進程被oom killer殺掉的權重,介于 [-17,15]之間,越高的權重,意味著更可能被oom killer選中,-17表示禁止被kill掉。

/proc/[pid]/oom_score,當前該pid進程的被kill的分數(shù),越高的分數(shù)意味著越可能被kill,這個數(shù)值是根據oom_adj運算后的結果,是oom_killer的主要參考。

sysctl 下有2個可配置選項:

vm.panic_on_oom = 0 #內存不夠時內核是否直接panic

vm.oom_kill_allocating_task = 1 #oom-killer是否選擇當前正在申請內存的進程進行kill

網頁標題:Linux內核--vm內存相關參數(shù)
轉載源于:http://muchs.cn/article32/gphipc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、網站設計、面包屑導航全網營銷推廣、品牌網站設計網站改版

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化