我們在磁碟寫操作持續繁忙的伺服器上曾經碰到乙個特殊的效能問題。每隔 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和inode cache記憶體的傾向;預設值100表示核心將根據pagecache和swapcache,把directory和inode cache保持在乙個合理的百分比;降低該值低於100,將導致核心傾向於保留directory和inode cache;增加該值超過100,將導致核心傾向於**directory和inode cache
預設設定:100
6、 /proc/sys/vm/min_free_kbytes
該檔案表示強制linux vm最低保留多少空閒記憶體(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頁
redis記憶體引數
下面這些redis記憶體方面的問題是在工作中發現的。可以作為乙個工作中的參考 一 redis資料型別的特殊編碼形式 在redis2.2以後許多資料型別為了節約記憶體使用大小,都開啟了乙個壓縮的演算法,當資料庫中的 元素個數少於配置檔案中設定的檔案個數時,這些元素最理想的情況下會被壓縮到10分之一的大...
WebLogic記憶體引數
開啟檔案 域目錄 bin setdomainenv.cmd linux環境為 域目錄 bin setdomainenv.sh 搜尋關鍵字 mem args 調整記憶體引數的數值大小 windows set mem args xms 1024 m xmx 1024 m xx permsize 128m...
指標引數傳遞記憶體
函式的引數是乙個指標,不要用該指標去申請動態記憶體 void get memory char p,int num void main void 可以得到str依舊是null。編譯器總是為每個函式的引數提供乙個臨時副本,指標引數p的副本看做是 p,編譯器使得 p p,如果函式體內的程式修改了 p指向的...