linux tcp参数调优,Linux TCP 性能调优笔记
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
為了保證可靠連接,tcp 建立連接需要“三次握手”,這三次握手對 tcp 的性能有至關重要的影響。
如何縮小這三次握手給性能帶來的影響是網(wǎng)絡性能調優(yōu)的一個重要關注點。
三次握手客戶端發(fā)送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態(tài)。這個階段可調節(jié)的參數(shù)有:net.ipv4.tcp_syn_retries: syn報文的重傳次數(shù).(至于重傳機制,暫時還沒搞清楚)
net.ipv4.tcp_fastopen: 開啟這個選項可以使 tcp 在第一個 SYN 包中就開始傳送數(shù)據(jù).(關于這個選項還需要進一步研究:是否需要對端也開啟此選項
服務器端收到 SYN 報文,進入SYN_RECV狀態(tài),回應一個 SYN(SEQ=y)ACK(ACK=x+1) 報文。這個階段可調節(jié)的參數(shù)有:net.ipv4.tcp_max_syn_backlog: 服務器中 syn 隊列的長度.當 syncookies 使能時,此時并不會有一個合法的最大值, 因此這個值會被忽略。 詳見man listen。
sysctl -w net.ipv4.tcp_syncookies=1 , 打開syncookie,在syn backlog隊列不足的時候,提供一種機制臨時將syn鏈接換出
net.ipv4.tcp_synack_retries: synack報文的重傳次數(shù).(同樣地,還未搞清楚重傳機制)
net.core.somaxconn: 這個參數(shù)限制了listen()函數(shù)的syn隊列大小,默認值為128,需適當提高這個值。
客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態(tài)。
至此,整個連接建立完成。
擁塞控制
擁塞控制機制是傳輸層為了保證網(wǎng)絡質量而施加的保護措施,但是這樣一來,
整個擁塞控制機制會使得tcp連接在很多時候難以發(fā)揮出最好的性能,
如何減小tcp擁塞控制帶來的性能損失,也是tcp性能調優(yōu)的一個關鍵點。
擁塞控制的幾個關鍵詞
慢開始,擁塞預防,快恢復,快重傳
tcp_available_congestion_control: 系目前支持的擁塞控制算法列表.
tcp_congestion_control: 用來設置當前使用的擁塞控制算法.
tcp_allowed_congestion_control: 設置可選的擁塞控制算法列表.
net.ipv4.tcp_window_scaling: 開啟窗口縮放,以支持更大范圍的接收窗口.
net.ipv4.tcp_slow_start_after_idle: 關閉慢啟動重啟.
擁塞控制的幾個關鍵參數(shù):initcwnd 初始擁塞窗口
設置初始擁塞窗口: ip route change
ssthresh 慢開始門限
rwnd 接收窗口大小.
增大TCP連接的initcwnd可以有效提升網(wǎng)絡的性能,代價就是這樣會使得整個網(wǎng)絡有可能變得擁堵.
同樣地,增大ssthresh也可以提升網(wǎng)絡性能.
需要注意的是,以上兩個參數(shù)調整的是系統(tǒng)自己的設置,比如initcwnd只能調整自己發(fā)送報文的速度,
并不能控制對端對報文的接收速度.
釋放連接
TCP連接的釋放也是一個復雜的過程,在這個地方,提升網(wǎng)絡性能的關鍵是如何快速釋放一個不再使用的連接,
或者如何重用一個連接。客戶端發(fā)起關閉請求,發(fā)送一個信息:FIN(m),此時客戶端進入FIN_WAIT1狀態(tài),服務器端在接收到FIN后,進入CLOSE_WAIT狀態(tài)。
服務端接受到信息后,首先返回ACK(m+1),表明自己已經(jīng)收到消息。客戶端在收到服務器端的ACK之后,進入FIN_WAIT2狀態(tài).
這個階段可調整的參數(shù)有:
net.ipv4.tcp_fin_timeout: 可設定客戶端在FIN_WAIT2狀態(tài)下最多持續(xù)多長時間后會自動關閉該連接.
服務端在準備好關閉之前,最后發(fā)送給客戶端一個FIN(n)消息,詢問客戶端是否準備好關閉了。此時服務器進入LASK_ACK狀態(tài).
客戶端接受到服務端發(fā)送的消息后,返回一個確認信息: ACK(n+1),此時客戶端進入 TIME_WAIT 狀態(tài)。
這個階段可調整的參數(shù)有:
net.ipv4.tcp_tw_recycle: 快速回收 TIME_WAIT 狀態(tài)下的連接.
net.ipv4.tcp_tw_reuse: 允許重用TIME_WAIT狀態(tài)下的連接,當然需要該連接是”協(xié)議安全的”(關于什么是協(xié)議安全,去讀源代碼)
tcp_max_tw_buckets: 任意時刻系統(tǒng)中最多允許存在的 TIME_WAIT 狀態(tài)的 tcp 連接.
最后,服務端和客戶端在雙方都得到確認時,再經(jīng)過一定時間之后,雙方狀態(tài)都變?yōu)镃LOSED,此時連接關閉。
特殊機制
tcp中還存一些特殊機制來應對各種不同的情況,這些地方的性能問題也是值得考察的。
KeepAlive
KeepAlive 是tcp協(xié)議中用來檢測tcp連接是否仍然處可用狀態(tài)的機制.net.ipv4.tcp_keepalive_time: 如果連接持續(xù)這么長時間沒有數(shù)據(jù)傳輸,那么就開始發(fā)送檢測報文.默認為兩個小時,太長了,需要縮小.
net.ipv4.tcp_keepalive_probes: 當系統(tǒng)發(fā)送多少次 keepalive 消息而沒有收到回復,此時認為該連接已失效。
默認值為:9 ,也就是說,9個 keepalive 消息沒有得到回應,服務器認為這個連接已經(jīng)失效,將關閉這個連接。
net.ipv4.tcp_keepalive_intvl: 系統(tǒng)重新發(fā)送 keepalive 消息的時間間隔,默認為 75 s.
SACK 選擇重傳net.ipv4.tcp_sack: 啟用選擇重傳機制,這個機制可以使系統(tǒng)只重傳真正丟失的數(shù)據(jù)報.
net.ipv4.tcp_thin_dsack: 允許發(fā)送兩個sack數(shù)據(jù)報
其他影響性能的問題
孤兒套接字net.ipv4.tcp_max_orphans: 系統(tǒng)中最大的孤兒套接字數(shù)量,在調節(jié)時不要降低這個值,需要注意的是,每個孤兒套接字會吃掉約64k內存,
這個值的初始設置為和NR_FILE相等,詳見man tcp
net.ipv4.tcp_orphan_retries: 當對端變成一個孤兒套接字時重試多少次直到關閉我們的tcp連接.
內存使用net.ipv4.tcp_meme:
net.ipv4.tcp_rmem:
net.ipv4.tcp_wmem:
net.core.wmem_max:
net.core.rmem_max:
其他參數(shù)限制
因為Linux系統(tǒng)中一切皆是文件,所以系統(tǒng)中對文件的許多限制也會間接地限制到socket連接.
– net.nf_conntrack_max: 系統(tǒng)支持的最大連接數(shù)
總結
以上是生活随笔為你收集整理的linux tcp参数调优,Linux TCP 性能调优笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 商业保险是什么保险 什么是商业保险
- 下一篇: 树莓派kail linux安装wine,