查看方式:
1、sysctl -a
2、cat /proc/sys/vm/overcommit_memory
一、overcommit_memory
內(nèi)核源碼中的介紹:
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.
文件指定了內(nèi)核針對內(nèi)存分配的策略,其值可以是0、1、2
0: (默認)表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應用進程使用;如果有足夠的可用內(nèi)存,內(nèi)存申請允許;否則,內(nèi)存申請失敗,并把錯誤返回給應用進程。0 即是啟發(fā)式的overcommitting handle,會盡量減少swap的使用,root可以分配比一般用戶略多的內(nèi)存
1: 表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當前的內(nèi)存狀態(tài)如何,允許超過CommitLimit,直至內(nèi)存用完為止。在數(shù)據(jù)庫服務器上不建議設(shè)置為1,從而盡量避免使用swap.
2: 表示不允許超過CommitLimit值
二、vm.overcommit_ratio
默認值為:50 (即50%)
這個參數(shù)值只有在vm.overcommit_memory=2的情況下,這個參數(shù)才會生效。
執(zhí)行g(shù)rep -i commit /proc/meminfo
看到CommitLimit和Committed_As參數(shù)。
CommitLimit是一個內(nèi)存分配上限,CommitLimit = 物理內(nèi)存 * overcommit_ratio(默認50,即50%) + swap大小
Committed_As是已經(jīng)分配的內(nèi)存大小。
一般情況:
情況①
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最低保留多少空閑內(nèi)存(Kbytes)。
當可用內(nèi)存低于這個參數(shù)時,系統(tǒng)開始回收cache內(nèi)存,以釋放內(nèi)存,直到可用內(nèi)存大于這個值。
vm.vfs_cache_pressure
該項表示內(nèi)核回收用于directory和inode cache內(nèi)存的傾向:
缺省值100表示內(nèi)核將根據(jù)pagecache和swapcache,把directory和inode cache保持在一個合理的百分比
降低該值低于100,將導致內(nèi)核傾向于保留directory和inode cache
增加該值超過100,將導致內(nèi)核傾向于回收directory和inode cache。
vm.dirty_background_ratio默認為10
所有全局系統(tǒng)進程的臟頁數(shù)量達到系統(tǒng)總內(nèi)存的多大比例后,就會觸發(fā)pdflush/flush/kdmflush等后臺回寫進程運行。
將vm.dirty_background_ratio設(shè)置為5-10,將vm.dirty_ratio設(shè)置為它的兩倍左右,以確保能持續(xù)將臟數(shù)據(jù)刷新到磁盤,避免瞬間I/O寫,產(chǎn)生嚴重等待(和MySQL中的innodb_max_dirty_pages_pct類似)
vm.dirty_ratio默認為20
單個進程的臟頁數(shù)量達到系統(tǒng)總內(nèi)存的多大比例后,就會觸發(fā)pdflush/flush/kdmflush等后臺回寫進程運行。
vm.panic_on_oom 默認為0開啟 為1時表示關(guān)閉此功能
等于0時,表示當內(nèi)存耗盡時,內(nèi)核會觸發(fā)OOM~~~~ killer殺掉最耗內(nèi)存的進程。
當OOM Killer被啟動時,通過觀察進程自動計算得出各當前進程的得分 /proc/
而且計算分值時主要參照 /proc/
/proc/[pid]/oom_adj ,該pid進程被oom killer殺掉的權(quán)重,介于 [-17,15]之間,越高的權(quán)重,意味著更可能被oom killer選中,-17表示禁止被kill掉。
/proc/[pid]/oom_score,當前該pid進程的被kill的分數(shù),越高的分數(shù)意味著越可能被kill,這個數(shù)值是根據(jù)oom_adj運算后的結(jié)果,是oom_killer的主要參考。
sysctl 下有2個可配置選項:
vm.panic_on_oom = 0 #內(nèi)存不夠時內(nèi)核是否直接panic
vm.oom_kill_allocating_task = 1 #oom-killer是否選擇當前正在申請內(nèi)存的進程進行kill
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。