oracle:swap性能調優

目標:解決大量Log寫入佔用大量的File Cache,內容利用不充分導致swap


基本原則:儘量使用內存,減少swap,同時,儘早flush到外存,早點釋放內存給寫cache使用。---特別在持續的寫入操作中,此優化非常有效。


調優措施:


vm.swapiness :60 改成 10
vm.dirty_ratio:90 改成 10
vm.dirty_background_ratio:60 改成 5
vm.dirty_expire_centisecs:3000改成500
vm.vfs_cache_pressure:100 改成 500


下面重點解釋一下各個配置的含義:


一,vm.swappiness優化:


swappiness的值的大小對如何使用swap分區是有着很大的聯繫的。swappiness=0的時候表示最大限度使用物理內存,然後纔是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裏面。linux的基本默認設置爲60,具體如下:


cat /proc/sys/vm/swappiness
60


也就是說,你的內存在使用到100-60=40%的時候,就開始出現有交換分區的使用。大家知道,內存的速度會比磁盤快很多,這樣子會加大系統io,同時造的成大量頁的換進換出,嚴重影響系統的性能,所以我們在操作系統層面,要儘可能使用內存,對該參數進行調整。


臨時調整的方法如下,我們調成10:


sysctl vm.swappiness=10
vm.swappiness = 10
cat /proc/sys/vm/swappiness
10


這只是臨時調整的方法,重啓後會回到默認設置的


要想永久調整的話,需要將在/etc/sysctl.conf修改,加上:


cat /etc/sysctl.conf
vm.swappiness=10

 


二,vm.dirty_ratio: 同步刷髒頁,會阻塞應用程序


這個參數控制文件系統的同步寫寫緩衝區的大小,單位是百分比,表示當寫緩衝使用到系統內存多少的時候(即指定了當文件系統緩存髒頁數量達到系統內存百分之多少時(如10%),),開始向磁盤寫出數據,即系統不得不開始處理緩存髒頁(因爲此時髒頁數量已經比較多,爲了避免數據丟失需要將一定髒頁刷入外存),在此過程中很多應用進程可能會因爲系統轉而處理文件IO而阻塞。


增大之會使用更多系統內存用於磁盤寫緩衝,也可以極大提高系統的寫性能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般啓動上缺省是 10。


 


三,vm.dirty_background_ratio:異步刷髒頁,不會阻塞應用程序 


這個參數控制文件系統的後臺進程,在何時刷新磁盤。單位是百分比,表示系統內存的百分比,意思是當寫緩衝使用到系統內存多少的時候,就會觸發pdflush/flush/kdmflush等後臺回寫進程運行,將一定緩存的髒頁異步地刷入外存。增大之會使用更多系統內存用於磁盤寫緩衝,也可以極大提高系統的寫性能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般啓動上缺省是 5。


注意:如果dirty_ratio設置比dirty_background_ratio大,可能認爲dirty_ratio的觸發條件不可能達到,因爲每次肯定會先達到vm.dirty_background_ratio的條件,然而,確實是先達到vm.dirty_background_ratio的條件然後觸發flush進程進行異步的回寫操作,但是這一過程中應用進程仍然可以進行寫操作,如果多個應用進程寫入的量大於flush進程刷出的量那自然會達到vm.dirty_ratio這個參數所設定的坎,此時操作系統會轉入同步地處理髒頁的過程,阻塞應用進程。


 


四,vm.dirty_expire_centisecs:


   這個參數聲明Linux內核寫緩衝區裏面的數據多“舊”了之後,pdflush進程就開始考慮寫到磁盤中去。單位是 1/100秒。缺省是 3000,也就是 30 秒的數據就算舊了,將會刷新磁盤。對於特別重載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因爲縮小太多也會導致IO提高太快。建議設置爲 1500,也就是15秒算舊。當然,如果你的系統內存比較大,並且寫入模式是間歇式的,並且每次寫入的數據不大(比如幾十M),那麼這個值還是大些的好。


 


五,Vm.dirty_writeback_centisecs:


   這個參數控制內核的髒數據刷新進程pdflush的運行間隔。單位是 1/100 秒。缺省數值是500,也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峯的寫操作削平成多次寫操作。設置方法如下:

 echo "200" > /proc/sys/vm/dirty_writeback_centisecs


如果你的系統是短期地尖峯式的寫操作,並且寫入數據不大(幾十M/次)且內存有比較多富裕,那麼應該增大此數值:


 


六,Vm.vfs_cache_pressure:


增大這個參數設置了虛擬內存回收directory和inode緩衝的傾向,這個值越大。越易回收


該文件表示內核回收用於directory和inode cache內存的傾向;缺省值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比;降低該值低於100,將導致內核傾向於保留directory和inode cache;增加該值超過100,將導致內核傾向於回收directory和inode cache。


This variable controls the tendency of the kernel to reclaim thememory which is used for caching of VFS caches, versus pagecache and swap.Increasing this value increases the rate at which VFS caches are reclaimed.Itis difficult to know when this should be changed, other than byexperimentation. The slabtop command (part of the package procps) shows topmemory objects used by the kernel. The vfs caches are the "dentry"and the "*_inode_cache" objects. If these are consuming a largeamount of memory in relation to pagecache, it may be worth trying to increasepressure. Could also help to reduce swapping. The default value is 100.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章