當前位置:編程學習大全網 - 源碼下載 - linux虛擬內存有什麽作用

linux虛擬內存有什麽作用

linux下的vm(虛擬內存)和windows下的作用是壹樣的,均是防止真實內存資源不足準備的.

linux的vm相關參數介紹

1. 保證linux有足夠的物理內存,可以調整vm的如下參數

vm.min_free_kbytes=409600;//默認值是3797,保證物理內存有足夠空閑空間,防止突發性換頁

vm.vfs_cache_pressure=200;//默認是100,增大這個參數設置了虛擬內存回收directory和i-node緩沖的傾向,這個值越大。越易回收

vm.swappiness=40 //缺省60,減少這個參數會使系統盡快通過swapout不使用的進程資源來釋放更多的物理內存

壹般在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/{number}/smp_affinity

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

這個參數控制哪些 CPU 可以綁定 IRQ 中斷。其中的 {number} 是對應設備的中斷編號,

可以用下面的命令找出:

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,這樣是比較合理的。

  • 上一篇:android中的動畫有哪幾類
  • 下一篇:斜率的三個公式
  • copyright 2024編程學習大全網