linux下proc裡關於磁碟效能的引數

2021-05-24 02:03:32 字數 3189 閱讀 4021

我們在磁碟寫操作

持續繁忙的伺服器上曾經碰到乙個特殊的效能問題。每隔 30 秒,伺服器就會遇到磁碟寫活動高峰,導致請求處理延遲非常大(超過3秒)。後來上網查了一下資料,通過調整核心引數,將寫活動的高峰分布成頻繁的多次寫,每次寫入的資料比較少。

這樣可以把尖峰的寫操作削平成多次寫操作。

以這種方式執行的效率比較低,因為核心不太有機會組合寫操作。但對於繁忙的伺服器,寫操作將更一致地進行,並將極大地改進互動式效能。

下面是相關引數的調整:

這個引數控制檔案系統的檔案系統寫緩衝區的大小,單位是百分比,表示系統記憶體的百分比,表示當寫緩衝使用到系統記憶體多少的時候,開始向磁碟寫出資料。增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,:

echo '1' > /proc/sys/vm/dirty_ratio

這個引數控制檔案系統的pdflush程序,在何時重新整理磁碟。單位是百分比,表示系統記憶體的百分比,意思是當寫緩衝使用到系統記憶體多少的時候,pdflush開始向磁碟寫出資料。增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,: 

echo '1' > /proc/sys/vm/dirty_background_ratio

這個引數控制核心的髒資料重新整理程序pdflush的執行間隔。單位是 1/100 秒。預設數值是500,也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峰的寫操作削平成多次寫操作。設定方法如下:

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

如果你的系統是短期地尖峰式的寫操作,並且寫入資料不大(幾十m/次)且記憶體有比較多富裕,那麼應該增大此數值:

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

這個引數宣告linux核心寫緩衝區裡面的資料多「舊」了之後,pdflush程序就開始考慮寫到磁碟中去。單位是 1/100秒。預設是 30000,也就是 30 秒的資料就算舊了,將會重新整理磁碟。對於特別過載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導致io提高太快。

echo "100" > /proc/sys/vm/dirty_expire_centisecs

當然,如果你的系統記憶體比較大,並且寫入模式是間歇式的,並且每次寫入的資料不大(比如幾十m),那麼這個值還是大些的好。

5、/proc/sys/vm/vfs_cache_pressure

該檔案表示核心**用於directory和inodecache記憶體的傾向;預設值100表示核心將根據pagecache和swapcache,把directory和inodecache保持在乙個合理的百分比;降低該值低於100,將導致核心傾向於保留directory和inodecache;增加該值超過100,將導致核心傾向於**directory和inodecache

預設設定:100

6、/proc/sys/vm/min_free_kbytes

該檔案表示強制linuxvm最低保留多少空閒記憶體(kbytes)。

預設設定:724(512m物理記憶體)

7、/proc/sys/vm/nr_pdflush_threads

該檔案表示當前正在執行的pdflush程序數量,在i/o負載高的情況下,核心會自動增加更多的pdflush程序。

預設設定:2(唯讀)

8、/proc/sys/vm/overcommit_memory

該檔案指定了核心針對記憶體分配的策略,其值可以是0、1、2。

0,表示核心將檢查是否有足夠的可用記憶體**用程序使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用程序。

1,表示核心允許分配所有的物理記憶體,而不管當前的記憶體狀態如何。

2,表示核心允許分配超過所有物理記憶體和交換空間總和的記憶體(參照overcommit_ratio)。

預設設定:0

9、/proc/sys/vm/overcommit_ratio

該檔案表示,如果overcommit_memory=2,可以過載記憶體的百分比,通過以下公式來計算系統整體可用記憶體。

系統可分配記憶體=交換空間+物理記憶體*overcommit_ratio/100

預設設定:50(%)

10、/proc/sys/vm/page-cluster

該檔案表示在寫一次到swap區的時候寫入的頁面數量,0表示1頁,1表示2頁,2表示4頁。

預設設定:3(2的3次方,8頁)

11、/proc/sys/vm/swapiness

該檔案表示系統進行交換行為的程度,數值(0-100)越高,越可能發生磁碟交換。

通過修改檔案/proc/sys/vm/bdflush實現。檔案中的九個引數含義如下:

nfract

:dirty緩衝在緩衝區中的最大百分比。超過這個值將bdflush程序重新整理硬碟。當可用記憶體比較少的情況下,將引發大量的磁碟i/o。為了均衡磁碟i/o,可以保持乙個比較低的值。

ndirty

:bdflush程序一次寫入磁碟的最大dirty緩衝塊數量。這個值比較大將導致i/o急劇增加,如果這個比較小,bdflush程序執行不夠從而可能導致記憶體的瓶頸。

dummy2

:未使用

dummy3

:未使用

interval

:kupdated工作和重新整理的最小頻率,預設值是5秒。最小值是0秒最大值是600秒。

age_buffer

:緩衝資料寫到磁碟之前作業系統等待的最大時間。預設值是30秒,最小值是1秒最大值是6000秒。

nfract_sync

:dirty快取啟用bdflush程序同步的百分比。預設值是60%。

nfract_stop

:dirty快取停止bdflush程序的百分比。預設值是20%。

dummy5

:未使用

比如在乙個寫操作頻繁的資料庫伺服器上設定:

105000

050301000

linux下proc裡關於磁碟效能的引數

我們在磁碟寫操作 持續繁忙的伺服器上曾經碰到乙個特殊的效能問題。每隔 30 秒,伺服器就會遇到磁碟寫活動高峰,導致請求處理延遲非常大 超過3秒 後來上網查了一下資料,通過調整核心引數,將寫活動的高峰分布成頻繁的多次寫,每次寫入的資料比較少。這樣可以把尖峰的寫操作削平成多次寫操作。以這種方式執行的效率...

linux下proc裡關於磁碟效能的引數

我們在磁碟寫操作 持續繁忙的伺服器上曾經碰到乙個特殊的效能問題。每隔 30 秒,伺服器就會遇到磁碟寫活動高峰,導致請求處理延遲非常大 超過3秒 後來上網查了一下資料,通過調整核心引數,將寫活動的高峰分布成頻繁的多次寫,每次寫入的資料比較少。這樣可以把尖峰的寫操作削平成多次寫操作。以這種方式執行的效率...

linux下proc裡關於磁碟效能的引數

我 們在磁碟寫操作持續繁忙的伺服器上曾經碰到乙個特殊的效能問題。每隔 30 秒,伺服器就會遇到磁碟寫活動高峰,導致請求處理延遲非常大 超過3秒 後來上網查了一下資料,通過調整核心引數,將寫活動的高峰分布成頻繁的多次寫,每次寫入的資料比較少。這樣可以把尖峰的寫操作削平成多次寫操作。以這種方式執行的效率...