linux的vm相關引數介紹

2021-07-09 22:44:48 字數 4134 閱讀 9772

linux的vm相關引數介紹

1. 保證linux有足夠的物理記憶體,可以調整vm的如下引數

vm.min_free_kbytes=409600;//預設值是3797,保證物理記憶體有足夠空閒空間,防止突發性換頁

vm.vfs_cache_pressure=200;//預設是100,增大這個引數設定了虛擬記憶體**directory和i-node緩衝的傾向,這個值越大。越易**

一般在rac的配置環境中配置這三個引數,可以防止換頁引起節點短暫無響應,導致節點重啟

2. 改善io系統的效能

overcommit_memory = 0

vm.overcommit_ratio = 10 //預設值是50,用於虛擬記憶體的物理記憶體的百分比

vm.dirty_ratio = 20 //預設值是40,為了保持穩定,持續的寫入,把這個值調整的小一些,經驗值是20

vm.dirty_background_ratio //預設數值是500,也就是5秒,如果系統要求穩定持續的寫,可以適當降低該值,把峰值的寫操作平均多次,也避免宕機丟失更多的資料

vm.dirty_expire_centisecs //預設是3000,也就是30秒,如果系統寫操作壓力很大,可以適當減小該值,但也不要太小;建議設定為 1500

vm的相關引數在/proc/sys目錄下

相關命令

sysctl -p  //修改vm引數後,執行這個命令可以立即生效

sysctl -a  //檢視所有的vm引數

與磁碟io子系統有關的

/proc/sys/vm/dirty_ratio

這個引數控制檔案系統的檔案系統寫緩衝區的大小,單位是百分比,表示系統記憶體的百分比,

表示當寫緩衝使用到系統記憶體多少的時候,開始向磁碟寫出資料。增大之會使用更多系統內

存用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恆定的寫入場合

時,應該降低其數值,一般啟動上預設是 10。下面是增大的方法:

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

/proc/sys/vm/dirty_background_ratio

這個引數控制檔案系統的pdflush程序,在何時重新整理磁碟。單位是百分比,表示系統記憶體的百

分比,意思是當寫緩衝使用到系統記憶體多少的時候,pdflush開始向磁碟寫出資料。增大之會

使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恆

定的寫入場合時,應該降低其數值,一般啟動上預設是 5。下面是增大的方法:

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

/proc/sys/vm/dirty_writeback_centisecs

這個引數控制核心的髒資料重新整理程序pdflush的執行間隔。單位是 1/100 秒。預設數值是500,

也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可

以把尖峰的寫操作削平成多次寫操作。設定方法如下:

echo "200" > /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秒。預設是 3000,也就是 30 秒的資料就算舊了,將會重新整理磁碟。對於特別過載的寫

操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導致io提高太快。建

議設定為 1500,也就是15秒算舊。

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

當然,如果你的系統記憶體比較大,並且寫入模式是間歇式的,並且每次寫入的資料不大(比如幾十m),

那麼這個值還是大些的好。

與網路io子系統有關的

/proc/sys/net/ipv4/tcp_retrans_collapse

這個引數控制tcp雙方window協商出現錯誤的時候的一些重傳的行為。但是在老的2.6的核 

(<2.6.18)裡頭,這個重傳會導致kernel oops,kernel panic,所以,如果出現有 

tcp_retrans_*樣子的kernel panic,可以把這個引數給設定成0:

echo '0' > /proc/sys/net/ipv4/tcp_retrans_collapse

提高linux應對短連線的負載能力

在存在大量短連線的情況下,linux的tcp棧一般都會生成大量的 time_wait 狀態的socket。

你可以用下面的命令看到:

netstat -ant| grep -i time_wait

有時候,這個數目是驚人的:

netstat -ant|grep -i time_wait |wc -l

可能會超過三四萬。這個時候,我們需要修改 linux kernel 的 tcp time wait的時間,縮短之,

有個 sysctl 引數貌似可以使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,預設值是 60,

也就是60秒,很多網上的資料都說將這個數值設定低一些就可以減少netstat 裡面的time_wait狀態,

但是這個說法是錯誤的。經過認真閱讀linux的核心源**,我們發現這個數值其實是輸出用的,

修改之後並沒有真正的讀回核心中進行使用,而核心中真正管用的是乙個巨集定義,在 

$kernel/include/net/tcp.h裡面,有下面的行:

#define tcp_timewait_len (60*hz) /* how long to wait to destroy time-wait

* state, about 60 seconds     */

而這個巨集是真正控制 tcp time_wait 狀態的超時時間的。如果我們希望減少 time_wait 狀態的數目

(從而節省一點點核心操作時間),那麼可以把這個數值設定低一些,根據我們的測試,設定為 10 

秒比較合適,也就是把上面的修改為:

#define tcp_timewait_len (10*hz) /* how long to wait to destroy time-wait

* state, about 60 seconds     */

然後重新編譯核心,重啟系統即可發現短連線造成的time_wait狀態大大減少:

netstat -ant | grep -i time_wait |wc -l

一般情況都可以至少減少2/3。也能相應提高系統應對短連線的速度。

/proc/irq//smp_affinity

在多 cpu 的環境中,還有乙個中斷平衡的問題,比如,網絡卡中斷會教給哪個 cpu 處理,

這個引數控制哪些 cpu 可以繫結 irq 中斷。其中的 是對應裝置的中斷編號,

可以用下面的命令找出:

cat /proc/interrupt

比如,一般 eth0 的 irq 編號是 16,所以控制 eth0 中斷繫結的 /proc 檔名是

/proc/irq/16/smp_affinity。上面這個命令還可以看到某些中斷對應的cpu處理的次數,

預設的時候肯定是不平衡的。

設定其值的方法很簡單,smp_affinity 自身是乙個位掩碼(bitmask),特定的位對應特

定的 cpu,這樣,01 就意味著只有第乙個 cpu 可以處理對應的中斷,而 0f(0x1111)

意味著四個 cpu 都會參與中斷處理。

幾乎所有外設都有這個引數設定,可以關注一下。

這個數值的推薦設定,其實在很大程度上,讓專門的cpu處理專門的中斷是效率最高的,比如,

給磁碟io乙個cpu,給網絡卡乙個cpu,這樣是比較合理的。

------end------

linux的vm相關引數介紹

author skate time 2010 04 13 linux的vm相關引數介紹 1.保證linux有足夠的物理記憶體,可以調整vm的如下引數 vm.min free kbytes 409600 預設值是3797,保證物理記憶體有足夠空閒空間,防止突發性換頁 vm.vfs cache pres...

go build 相關引數的介紹

go build a o cloudbak標記 描述 o 指定輸出檔案。a強行對所有涉及到的 包 包括標準庫中的 包 進行重新構建,即使它們已經是最新的了。n列印構建期間所用到的其它命令,但是並不真正執行它們。p n 構建的並行數量 n 預設情況下並行數量與cpu數量相同。race 開啟資料競爭檢測...

Linux相關介紹

linux相關介紹 1 linux其實是乙個作業系統最底層的核心 linux kernel 及其提供的核心工具。任何人均可取得原始碼與可執行這個核心程式,並且可以修改。此外,因為linux參考設計規範,相容於unix作業系統,故亦可稱為unix like的一種 2 為了讓使用者能夠接觸到linux,...