Linux TCP 緩衝區引數調優

2021-08-26 15:03:52 字數 2536 閱讀 4927

系統原值:

[wqf@admin autopush]$ cat /proc/sys/net/core/rmem_max

4194304

[wqf@admin autopush]$ cat /proc/sys/net/core/wmem_max

1048576

[wqf@admin autopush]$ cat /proc/sys/net/ipv4/tcp_rmem

4096 87380 4194304

[wqf@admin autopush]$ cat /proc/sys/net/ipv4/tcp_wmem

4096 16384 4194304

[wqf@admin autopush]$ cat /proc/sys/net/ipv4/tcp_mem

3073344 4097792 6146688

設定值:

#如此操作後的設定在系統重啟後會恢復為原值

echo 16777216 > /proc/sys/net/core/rmem_max

echo 16777216 > /proc/sys/net/core/wmem_max

echo "4096 873800 16777216" > /proc/sys/net/ipv4/tcp_rmem

echo "4096 873800 16777216" > /proc/sys/net/ipv4/tcp_wmem

echo "3073344 4097792 16777216" > /proc/sys/net/ipv4/tcp_mem

解析:

tcp_wmem(3個integer變數): min, default, max

min:為tcp socket預留用於傳送緩衝的記憶體最小值。每個tcp socket都可以在建議以後都可以使用它。預設值為4096(4k)。

default:為tcp socket預留用於傳送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低於net.core.wmem_default的值。預設值為16384(16k)。

max: 用於tcp socket傳送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,"靜態"選擇引數so_sndbuf則不受該值影響。預設值為131072(128k)。(對於伺服器而言,增加這個引數的值對於傳送資料很有幫助)

tcp_mem(3個integer變數):low, pressure, high

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 倍的資料。 我的網路裡為192000 300000 732000)

對/proc/sys/net目錄下內容的修改都是臨時的,任何修改在系統重啟後都會丟失。若要永久性設定,則在檔案/etc/sysctl.conf中設定如下:

net.core.rmem_default=16777216

net.core.rmem_max=16777216

net.core.wmem_default=16777216

net.core.wmem_max=16777216

net.ipv4.tcp_mem=6177504 8236672 16777216

net.ipv4.tcp_rmem=4096 873800 16777216

net.ipv4.tcp_wmem=4096 873800 16777216

/etc/sysctl.conf是乙個允許你改變正在執行中的linux系統的介面。它包含一些tcp/ip堆疊和虛擬記憶體系統的高階選項,可用來控制linux網路配置,由於/proc/sys/net目錄內容的臨時性,建議把tcpip引數的修改新增到/etc/sysctl.conf檔案, 然後儲存檔案,使用命令「/sbin/sysctl –p」使之立即生效。

Shuffle調優一 調節map端緩衝區大小

在spark任務執行過程中,如果shuffle的map端處理的資料量比較大,但是map端緩衝的大小是固定的,可能會出現map端緩衝資料頻繁spill溢寫到磁碟檔案中的情況,使得效能非常低下,通過調節 map端緩衝的大小,可以避免頻繁的磁碟 io操作,進而提公升 spark 任務的整體效能。map端緩...

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...

使用者程序緩衝區和核心緩衝區

常常聽到有程式設計師會跟你討論 我們在讀寫檔案的時候,系統是有快取的 但實際上有一部分人把使用者程序緩衝區和系統空間的緩衝區的概念混淆了,包括這兩種緩衝區的用法和所要解決的問題,還有其它類似的概念。本文就來區分一下不同的緩衝區概念 主要針對類unix平台 使用者程序和作業系統的關係 首先我用一張圖來...