爲方便對系統內核參數調節,現根據官方內核包裏的文檔做了一些摘譯。
系統環境:CentOS 5.5 X86
可以使用下面的方法下載內核包:
cd /usr/src/
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.8.tar.bz2
tar xvfj linux-2.6.18.8.tar.bz2
mv linux-2.6.18.8 linux
cd /usr/src/linux/Documentation/
使用find命令查找sysctl目錄及文件:
cd /usr/src/linux/Documentation/
find . -name "*sysctl*"
可以看到有一個目錄和兩個文件。進入到sysctl目錄。
cd /usr/src/linux/Documentation/sysctl/
可以看到有以下幾個文件:
這裏主要記錄一些關於VM調整的一些參數。
可以打開vm.txt文件,看看裏面寫了些什麼,很多重要參數說明都在這裏解釋着呢。
more vm.txt
關於vm的這些參數文件都在/proc/sys/vim/目錄,可以看下,這個目錄下有些什麼文件:
cd /proc/sys/vm ; ls
看看這些文件都在vm.txt裏有具體的說明。
上圖中的一些參數的解釋並不在vm.txt,而在proc.txt文件,proc.txt的路徑/usr/src/linux/Documentation/filesystems/proc.txt:
dirty_ratio, dirty_background_ratio, dirty_expire_centisecs,dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode,block_dump, swap_token_timeout, drop-caches
好了,說一堆沒用的,下面跟着vm.txt文件,說一些比較重要的參數吧:
可以執行命令,如下圖示:
sysctl -a|grep “^vm.*”
這些參數對應的文件路徑都在這個目錄下:/proc/sys/vm/
修改sysctl裏的參數值等於修改/proc/sys/vm/目錄下的文件值。以下介紹幾個重要的參數:
(1)vm.overcommit_memory
默認值爲:0
從內核文檔裏得知,該參數有三個值,分別是:
0:當用戶空間請求更多的的內存時,內核嘗試估算出剩餘可用的內存。
1:當設這個參數值爲1時,內核允許超量使用內存直到用完爲止,主要用於科學計算
2:當設這個參數值爲2時,內核會使用一個決不過量使用內存的算法,即系統整個內存地址空間不能超過swap+50%的RAM值,50%參數的設定是在overcommit_ratio中設定。
(2)vm.overcommit_ratio
默認值爲:50
這個參數值只有在vm.overcommit_memory=2的情況下,這個參數纔會生效。
(3)vm.page-cluster
默認值爲:3
這個參數用來控制VM的虛擬內存的,讀取大量的page,同時發生page錯誤時,linux VM子系統爲了避免過多的磁盤尋址。讀取大量的page依賴於系統的內存。內核 一次讀取page的數量等於2的page-cluster值的次方即2^page-cluster。當設的值超過2的5次方即2^5,它不會被swap所檢測到。因爲swap的數據page最大爲2的5次方即32-page。
(4)vm.min_free_kbytes
默認值 :3519
這個參數值用來強制linux虛擬內存保留最小值的空閒。
(5)vm.drop_caches
默認值 :0
設置這個參數的值會讓內核清理內存中的caches、denties、inodes,從而釋放更多的內存。
有三個值可以設置,每設一個值都會引發內核釋放不同的內容:
1:釋放pagecache
2:釋放denties、inodes
3:釋放pagecache、denties、inodes
由於這是一個非破壞性操作而且髒對象不會被釋放,因此應當先執行”sync“後再設置這個參數。
(6)vm.dirty_writeback_centisecs
默認值:499
這個參數會觸發pdflush回寫進程定期喚醒並將old數據寫到磁盤。每次的喚醒的間隔,是以數字100算做1秒。
如果將這項值設爲500就相當5秒喚醒pdflush進程。
如果將這項值設爲0就表示完全禁止定期回寫數據。
(7)vm.dirty_ratio
默認值:40
參數意義:控制一個在產生磁盤寫操作的進程開始寫出髒數據到內存緩衝區。緩衝區的值大小是系統內存的百分比。增大會使用更多系統內存用於磁盤寫緩衝,可以提高系統的寫性能。當需要持續、恆定的寫入場合時,應該降低該數值。
(8)vm.dirty_expire_centisecs
默認值:2999
參數意義:用來指定內存中數據是多長時間纔算髒(dirty)數據。指定的值是按100算做一秒計算。只有當超過這個值後,纔會觸發內核進程pdflush將dirty數據寫到磁盤。
(9)vm.dirty_background_ratio
默認值 :10
參數意義:控制pdflush後臺回寫進程開始寫出髒數據到系統內存緩衝區。緩衝區的值大小是系統內存的百分比。增大會使用更多系統內存用於磁盤寫緩衝,可以提高系統的寫性能。當需要持續、恆定的寫入場合時,應該降低該數值。
(10)vm.vfs_cache_pressure
默認值:100
參數意義:控制內核回收再利用用於緩存目錄與inode對象的內存的趁勢。
默認值設爲100表示內核以平等的速度去考慮pagecache和swapcache的回收再利用。
減小它,會觸發內核保持目錄與inodes的緩存內存。
增大它,會觸發內核回收再利用目錄與inodes的緩存內存。
(11)vm.panic_on_oom
默認值 :0
參數意義:當超出內存時,是否開啓內核崩潰特性。
當設爲1時,表示當發生超出內存時,內核會panic
當設爲0時,表示當發生超出內存時,內核會kill掉一些空閒進程從而不讓系統內核崩潰而繼續運行,通常也稱它爲oom_killer
因此一般用它的默認值即可