為方便對系統內核參數調節,現根據官方內核包里的文檔做了一些摘譯.
系統環境: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
因此一般用它的默認值即可
本文出自 「寧靜致遠」 博客,請務必保留此出處http://skyou.blog.51cto.com/2915693/558461
[火星人 ] Linux系統優化(2)---sysctl設置內核參數之VM已經有1343次圍觀