(1)vm.overcommit_memoryhtml
執行grep -i commit /proc/meminfonode
看到CommitLimit和Committed_As參數。mysql
CommitLimit是一個內存分配上限,CommitLimit = 物理內存 * overcommit_ratio(默認50,即50%) + swap大小sql
Committed_As是已經分配的內存大小。數據庫
--------centos
(2)vm.overcommit_ratio服務器
默認值爲:50 (即50%)post
這個參數值只有在vm.overcommit_memory=2的狀況下,這個參數纔會生效。spa
------------------------------------------------------------------------------htm
vm.min_free_kbytes
cat /proc/sys/vm/min_free_kbytes centos6.4默認66M
67584
該文件表示強制Linux VM最低保留多少空閒內存(Kbytes)。
當可用內存低於這個參數時,系統開始回收cache內存,以釋放內存,直到可用內存大於這個值。
vm.vfs_cache_pressure
該項表示內核回收用於directory和inode cache內存的傾向:
缺省值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比
下降該值低於100,將致使內核傾向於保留directory和inode cache
增長該值超過100,將致使內核傾向於回收directory和inode cache。
網上文章建議 sysctl -w vm.vfs_cache_pressure=200
其實通常狀況下不須要調整,只有在極端場景下才建議進行調整,只有此時,纔有必要進行調優,這也是調優的意義所在。
vm.dirty_background_ratio 默認爲10
全部全局系統進程的髒頁數量達到系統總內存的多大比例後,就會觸發pdflush/flush/kdmflush等後臺回寫進程運行。
將vm.dirty_background_ratio設置爲5-10,將vm.dirty_ratio設置爲它的兩倍左右,以確保能持續將髒數據刷新到磁盤,避免瞬間I/O寫,產生嚴重等待(和MySQL中的innodb_max_dirty_pages_pct相似)
vm.dirty_ratio 默認爲20
單個進程的髒頁數量達到系統總內存的多大比例後,就會觸發pdflush/flush/kdmflush等後臺回寫進程運行。
--------------------------------------------------
vm.panic_on_oom 默認爲0開啓 爲1時表示關閉此功能
等於0時,表示當內存耗盡時,內核會觸發OOM killer殺掉最耗內存的進程。
當OOM Killer被啓動時,經過觀察進程自動計算得出各當前進程的得分 /proc/<PID>/oom_score,分值越高越容易被kill掉。
並且計算分值時主要參照 /proc/<PID>/oom_adj , oom_adj 取值範圍從-17到15,當等於-17時表示在任什麼時候候此進程都不會被 oom killer kill掉(適用於mysql)。
/proc/[pid]/oom_adj ,該pid進程被oom killer殺掉的權重,介於 [-17,15]之間,越高的權重,意味着更可能被oom killer選中,-17表示禁止被kill掉。
/proc/[pid]/oom_score,當前該pid進程的被kill的分數,越高的分數意味着越可能被kill,這個數值是根據oom_adj運算後的結果,是oom_killer的主要參考。
sysctl 下有2個可配置選項:
vm.panic_on_oom = 0 #內存不夠時內核是否直接panic
vm.oom_kill_allocating_task = 1 #oom-killer是否選擇當前正在申請內存的進程進行kill