Linux下對TCP緩衝區參數調整

一、查看

  • 查看TCP讀緩衝區
king@ubuntu:~$ cat /proc/sys/net/ipv4/tcp_rmem
4096	87380	6291456
第一個值:4096	    
給socket接收緩衝區分配的最小值min
第二個值:87380 	  	默認值deafult
默認值,接收緩衝區大小在系統負載不重的情況下可以增長到這個值
第三個值:6291456 	最大值max
是接收緩衝區最大值

當我們修改TCP緩衝區大小時,最小不能小於4096,最大不能大於6291456
修改的值需要在這個範圍內
  • 查看TCP寫緩衝區
king@ubuntu:~$ cat /proc/sys/net/ipv4/tcp_wmem
4096	16384	4194304
  • 查看TCP使用的內存
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)
{
    /* nr_free_buffer_pages()計算ZONE_DMA和ZONE_NORMAL的頁數,
     * 對於64位系統來說,其實就是所有內存了。
     */
    unsigned long limit = nr_free_buffer_pages() / 8;
    limit = max(limit, 128UL); /* 不能低於128頁 */
 
    sysctl_tcp_mem[0] = limit / 4 * 3; /* 最小值設爲3/32的系統內存 */
    sysctl_tcp_mem[1] = limit; /* 壓力值設爲1/8的系統內存 */
    sysctl_tcp_mem[2] = sysctl_tcp_mem[0] * 2; /* 最大值設爲3/16的系統內存 */
}

二、調整

如何永久性修改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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章