Linux下對TCP緩衝區引數調整

2021-09-25 19:54:04 字數 1825 閱讀 8066

一、檢視

king@ubuntu:~$ cat /proc/sys/net/ipv4/tcp_rmem

4096 87380 6291456

第乙個值:4096	    

給socket接收緩衝區分配的最小值min

第二個值:87380 預設值deafult

預設值,接收緩衝區大小在系統負載不重的情況下可以增長到這個值

第三個值:6291456 最大值max

是接收緩衝區最大值

當我們修改tcp緩衝區大小時,最小不能小於4096,最大不能大於6291456

修改的值需要在這個範圍內

king@ubuntu:~$ cat /proc/sys/net/ipv4/tcp_wmem

4096 16384 4194304

king@ubuntu:~$ cat /proc/sys/net/ipv4/tcp_mem

22317 29759 44634

其中,這三個值不是很好理解:

low:

當tcp使用了低於該值的記憶體頁面數時,tcp不會考慮釋放記憶體。

(理想情況下,這個值應與指定給 tcp_wmem 的第 2 個值相匹配 - 這第 2 個值表明,

最大頁面大小乘以最大併發請求數除以頁大小 (131072 * 300 / 4096)。 )

pressure:

當tcp使用了超過該值的記憶體頁面數量時,tcp試圖穩定其記憶體使用,進入pressure模式,

當記憶體消耗低於low值時則退出pressure狀態。

(理想情況下這個值應該是 tcp 可以使用的總緩衝區大小的最大值 (204800 * 300 / 4096)

high:

允許所有tcp sockets用於排隊緩衝資料報的頁面量。

(如果超過這個值,tcp 連線將被拒絕,這就是為什麼不要令其過於保守 (512000 * 300 / 4096) 的原因了。

在這種情況下,提供的價值很大,它能處理很多連線,是所預期的 2.5 倍;

或者使現有連線能夠傳輸 2.5 倍的資料。

一般情況下這些值是在系統啟動時根據系統記憶體數量計算得到的,以頁為單位(4k)。

tcp記憶體的初始化過程:

static void tcp_init_mem(void)

二、調整

如何永久性修改tcp緩衝區的大小:在/etc/sysctl.conf修改如下內容:

net.ipv4.tcp_mem = 6177504 8236672 16777216

net.ipv4.tcp_rmem = 4096 873800 16777216

net.ipv4.tcp_wmem = 4096 873800 16777216

然後執行/sbin/sysctl –p使之生效,修改完後再檢視

king@ubuntu:~$ sudo /sbin/sysctl -p

[sudo] king 的密碼:

net.ipv4.tcp_mem = 6177504 8236672 16777216

net.ipv4.tcp_rmem = 4096 873800 16777216

net.ipv4.tcp_wmem = 4096 873800 16777216

PHP下對緩衝區的控制

php4.0 提供了乙個輸出緩衝函式集合。輸出緩衝支援允許你寫包裹函式功能壓縮緩衝區。在 php4 的輸出緩衝支援允許 html 頭資訊存放,無論 html的正文是否輸出。但在php中,頭資訊 header content type,and cookies 不採用緩衝 在使用php的過程中不免要使用...

對緩衝區的理解

緩衝區 buffer 它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區,顯然緩衝區是具有一定大小的。緩衝區根據其對應的是輸入裝置還是輸出裝置,分為輸入緩衝區和輸出緩衝區。我們為什麼要引入緩衝區呢?高速裝置與低速裝...

linux檔案緩衝區

一 緩衝區機制 根據應用程式對檔案的訪問方式,即是否存在緩衝區,對檔案的訪問可以分為帶緩衝區的操作和非緩衝區的檔案操作 緩衝區檔案操作 高階檔案系統,將在使用者空間中自動為正在使用的檔案開闢記憶體緩衝區。非緩衝區檔案系統 低階檔案系統,如果需要,只能由使用者在自己的程式中為每個檔案設定緩衝區。如果採...