linux下proc裏關於磁盤性能的參數

  咱們在磁盤寫操做持續繁忙的服務器上曾經碰到一 個特殊的性能問題。每隔 30 秒,服務器就會遇到磁盤寫活動高峯,致使請求處理延遲很是大(超過3秒)。後來上網查了一下資料,經過調整內核參數,將寫活動的高峯分佈成頻繁的屢次寫, 每次寫入的數據比較少。這樣能夠把尖峯的寫操做削平成屢次寫操做。以這種方式執行的效率比較低,由於內核不太有機會組合寫操做。但對於繁忙的服務器,寫操 做將更一致地進行,並將極大地改進交互式性能。
  下面是相關參數的調整:node

1、2.6內核下數據庫

  一、/proc/sys/vm/dirty_ratio  
  這個參數控制文件系統的文件系統寫緩衝區的大小,單位是百分比,表示系統內存的百分比,表示當寫緩衝使用到系統內存多少的時候,開始向磁盤寫出數據。增大 之會使用更多系統內存用於磁盤寫緩衝,也能夠極大提升系統的寫性能。可是,當你須要持續、恆定的寫入場合時,應該下降其數值,:
  echo '1' > /proc/sys/vm/dirty_ratio api

  二、/proc/sys/vm/dirty_background_ratio  
  這個參數控制文件系統的pdflush進程,在什麼時候刷新磁盤。單位是百分比,表示系統內存的百分比,意思是當寫緩衝使用到系統內存多少的時 候,pdflush開始向磁盤寫出數據。增大之會使用更多系統內存用於磁盤寫緩衝,也能夠極大提升系統的寫性能。可是,當你須要持續、恆定的寫入場合時, 應該下降其數值,:
  echo '1' > /proc/sys/vm/dirty_background_ratio服務器

  三、/proc/sys/vm/dirty_writeback_centisecs  
  這個參數控制內核的髒數據刷新進程pdflush的運行間隔。單位是 1/100 秒。缺省數值是500,也就是 5 秒。若是你的系統是持續地寫入動做,那麼實際上仍是下降這個數值比較好,這樣能夠把尖峯的寫操做削平成屢次寫操做。設置方法以下:
  echo "100" > /proc/sys/vm/dirty_writeback_centisecs  若是你的系統是短時間地尖峯式的寫操做,而且寫入數據不大(幾十M/次)且內存有比較多富裕,那麼應該增大此數值:
  echo "1000" > /proc/sys/vm/dirty_writeback_centisecs性能

  四、/proc/sys/vm/dirty_expire_centisecs  
  這個參數聲明Linux內核寫緩衝區裏面的數據多「舊」了以後,pdflush進程就開始考慮寫到磁盤中去。單位是 1/100秒。缺省是 30000,也就是 30 秒的數據就算舊了,將會刷新磁盤。對於特別重載的寫操做來講,這個值適當縮小也是好的,但也不能縮小太多,由於縮小太多也會致使IO提升太快。
  echo "100" > /proc/sys/vm/dirty_expire_centisecs  
  固然,若是你的系統內存比較大,而且寫入模式是間歇式的,而且每次寫入的數據不大(好比幾十M),那麼這個值仍是大些的好。線程

  五、/proc/sys/vm/vfs_cache_pressure
  該文件表示內核回收用於directory和inode  cache內存的傾向;缺省值100表示內核將根據pagecache和swapcache,把directory和inode  cache保持在一個合理的百分比;下降該值低於100,將致使內核傾向於保留directory和inode  cache;增長該值超過100,將致使內核傾向於回收directory和inode  cache 
  缺省設置:100   進程

  六、/proc/sys/vm/min_free_kbytes
  該文件表示強制Linux  VM最低保留多少空閒內存(Kbytes)。  缺省設置:724(512M物理內存)  內存

  七、/proc/sys/vm/nr_pdflush_threads
  
該文件表示當前正在運行的pdflush進程數量,在I/O負載高的狀況下,內核會自動增長更多的pdflush進程。  
  缺省設置:2(只讀)  it

  八、/proc/sys/vm/overcommit_memory
  
該文件指定了內核針對內存分配的策略,其值能夠是0、一、2。
  0,  表示內核將檢查是否有足夠的可用內存供應用進程使用;若是有足夠的可用內存,內存申請容許;不然,內存申請失敗,並把錯誤返回給應用進程。
  1,  表示內核容許分配全部的物理內存,而無論當前的內存狀態如何。
  2,  表示內核容許分配超過全部物理內存和交換空間總和的內存(參照overcommit_ratio)。  
  缺省設置:0io

  九、/proc/sys/vm/overcommit_ratio
  該文件表示,若是overcommit_memory=2,能夠過載內存的百分比,經過如下公式來計算系統總體可用內存。
  系統可分配內存=交換空間+物理內存*overcommit_ratio/100   缺省設置:50(%)  

  十、/proc/sys/vm/page-cluster
  該文件表示在寫一次到swap區的時候寫入的頁面數量,0表示1頁,1表示2頁,2表示4頁。  缺省設置:3(2的3次方,8頁) 

  十一、/proc/sys/vm/swapiness
  該文件表示系統進行交換行爲的程度,數值(0-100)越高,越可能發生磁盤交換。


五.總結

 

1.經過這四個參數,能夠控制髒數據在內存中佔用多大比例寫入磁盤文件系統;

2.髒數據在內存中最多能夠存在多長時間,超過這個時間就寫入磁盤;

3.單個任務在內存中的髒數據所佔內存比例多大則寫入磁盤;

4.pdflush內核線程執行的頻率。

 

    

六.注意

 

1. 區分  dirty_background_ratio   與  dirty_ratio   的不一樣  。

 

 

2. 數據庫系統 ORACLE  和  MySQL的性能調優不少都是基於OS層面的。即便數據庫進行調優,具體參數還得受限於OS。由於RDBMS 安裝在 OS上。

 

 

七.經過下面命令查看這四個參數

 find /proc/sys/vm  -name dirty*  -print   | while  read   name; do  echo $name ;cat ${name}; done

 

例如:

[root@localhost Desktop]# find /proc/sys/vm  -name dirty*  -print   | while  read   name; do  echo $name ;cat ${name}; done

/proc/sys/vm/dirty_expire_centisecs

2999

/proc/sys/vm/dirty_writeback_centisecs

499

/proc/sys/vm/dirty_ratio

40

/proc/sys/vm/dirty_background_ratio

10

[root@localhost Desktop]# 

 

 

八.調整方法

1.(法一)  vi  /etc/sysctl.conf  

而後修改便可好比

 

vm.dirty_ratio =  30

 

sysctl -p  生效(重啓有效)

 

2.(法二)  echo  30 >  /proc/sys/vm/dirty_ratio

 

echo   30 > /proc/sys/vm/dirty_ratio

 

這種方法重啓無效

相關文章
相關標籤/搜索