Linux 常用內(nèi)核網(wǎng)絡(luò)參數(shù)介紹與相關(guān)問題

Linux 常用內(nèi)核網(wǎng)絡(luò)參數(shù)介紹與相關(guān)問題

Linux 內(nèi)核中關(guān)于網(wǎng)絡(luò)的相關(guān)參數(shù)進行簡要介紹子寓。然后對常見相關(guān)問題的處理進行說明苹熏。

Liunx 常見網(wǎng)絡(luò)參數(shù)介紹

下表是常見網(wǎng)參數(shù)的介紹:

參數(shù)  描述
net.core.rmem_default   默認的TCP數(shù)據(jù)接收窗口大泻质(字節(jié))置媳。
net.core.rmem_max   最大的TCP數(shù)據(jù)接收窗口(字節(jié))栓始。
net.core.wmem_default   默認的TCP數(shù)據(jù)發(fā)送窗口大心肱啤(字節(jié))康愤。
net.core.wmem_max   最大的TCP數(shù)據(jù)發(fā)送窗口(字節(jié))。
net.core.netdev_max_backlog 在每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時舶吗,允許送到隊列的數(shù)據(jù)包的最大數(shù)目征冷。的數(shù)據(jù)包的最大數(shù)目。
net.core.somaxconn  定義了系統(tǒng)中每一個端口最大的監(jiān)聽隊列的長度誓琼,這是個全局的參數(shù)检激。
net.core.optmem_max 表示每個套接字所允許的最大緩沖區(qū)的大小。
net.ipv4.tcp_mem    確定TCP棧應(yīng)該如何反映內(nèi)存使用腹侣,每個值的單位都是內(nèi)存頁(通常是4KB)叔收。
第一個值是內(nèi)存使用的下限;
第二個值是內(nèi)存壓力模式開始對緩沖區(qū)使用應(yīng)用壓力的上限傲隶;
第三個值是內(nèi)存使用的上限饺律。在這個層次上可以將報文丟棄,從而減少對內(nèi)存的使用跺株。對于較大的BDP可以增大這些值(注意复濒,其單位是內(nèi)存頁而不是字節(jié))。
net.ipv4.tcp_rmem   為自動調(diào)優(yōu)定義socket使用的內(nèi)存乒省。
第一個值是為socket接收緩沖區(qū)分配的最少字節(jié)數(shù)巧颈;
第二個值是默認值(該值會被rmem_default覆蓋),緩沖區(qū)在系統(tǒng)負載不重的情況下可以增長到這個值袖扛;
第三個值是接收緩沖區(qū)空間的最大字節(jié)數(shù)(該值會被rmem_max覆蓋)砸泛。
net.ipv4.tcp_wmem   為自動調(diào)優(yōu)定義socket使用的內(nèi)存。
第一個值是為socket發(fā)送緩沖區(qū)分配的最少字節(jié)數(shù);
第二個值是默認值(該值會被wmem_default覆蓋)唇礁,緩沖區(qū)在系統(tǒng)負載不重的情況下可以增長到這個值勾栗;
第三個值是發(fā)送緩沖區(qū)空間的最大字節(jié)數(shù)(該值會被wmem_max覆蓋)。
net.ipv4.tcp_keepalive_time TCP發(fā)送keepalive探測消息的間隔時間(秒)盏筐,用于確認TCP連接是否有效械姻。
net.ipv4.tcp_keepalive_intvl    探測消息未獲得響應(yīng)時,重發(fā)該消息的間隔時間(秒)机断。
net.ipv4.tcp_keepalive_probes   在認定TCP連接失效之前楷拳,最多發(fā)送多少個keepalive探測消息。
net.ipv4.tcp_sack   啟用有選擇的應(yīng)答(1表示啟用)吏奸,通過有選擇地應(yīng)答亂序接收到的報文來提高性能欢揖,讓發(fā)送者只發(fā)送丟失的報文段,(對于廣域網(wǎng)通信來說)這個選項應(yīng)該啟用奋蔚,但是會增加對CPU的占用她混。
net.ipv4.tcp_fack   啟用轉(zhuǎn)發(fā)應(yīng)答,可以進行有選擇應(yīng)答(SACK)從而減少擁塞情況的發(fā)生泊碑,這個選項也應(yīng)該啟用坤按。
net.ipv4.tcp_timestamps TCP時間戳(會在TCP包頭增加12個字節(jié)),以一種比重發(fā)超時更精確的方法(參考RFC 1323)來啟用對RTT 的計算馒过,為實現(xiàn)更好的性能應(yīng)該啟用這個選項臭脓。
net.ipv4.tcp_window_scaling 啟用RFC 1323定義的window scaling,要支持超過64KB的TCP窗口腹忽,必須啟用該值(1表示啟用)来累,TCP窗口最大至1GB,TCP連接雙方都啟用時才生效窘奏。
net.ipv4.tcp_syncookies 表示是否打開TCP同步標簽(syncookie)嘹锁,內(nèi)核必須打開了CONFIG_SYN_COOKIES項進行編譯,同步標簽可以防止一個套接字在有過多試圖連接到達時引起過載着裹。
net.ipv4.tcp_tw_reuse   表示是否允許將處于TIME-WAIT狀態(tài)的socket(TIME-WAIT的端口)用于新的TCP
連接 领猾。
net.ipv4.tcp_tw_recycle 能夠更快地回收TIME-WAIT套接字。
net.ipv4.tcp_fin_timeout    對于本端斷開的socket連接骇扇,TCP保持在FIN-WAIT-2狀態(tài)的時間(秒)摔竿。對方可能會斷開連接或一直不結(jié)束連接或不可預(yù)料的進程死亡。
net.ipv4.ip_local_port_range    表示TCP/UDP協(xié)議允許使用的本地端口號
net.ipv4.tcp_max_syn_backlog    對于還未獲得對方確認的連接請求匠题,可保存在隊列中的最大數(shù)目拯坟。如果服務(wù)器經(jīng)常出現(xiàn)過載但金,可以嘗試增加這個數(shù)字韭山。
net.ipv4.tcp_low_latency    允許TCP/IP棧適應(yīng)在高吞吐量情況下低延時的情況,這個選項應(yīng)該禁用。
net.ipv4.tcp_westwood   啟用發(fā)送者端的擁塞控制算法钱磅,它可以維護對吞吐量的評估梦裂,并試圖對帶寬的整體利用情況進行優(yōu)化,對于WAN 通信來說應(yīng)該啟用這個選項盖淡。
net.ipv4.tcp_bic    為快速長距離網(wǎng)絡(luò)啟用Binary Increase Congestion年柠,這樣可以更好地利用以GB速度進行操作的鏈接,對于WAN通信應(yīng)該啟用這個選項褪迟。
net.ipv4.tcp_max_tw_buckets 該參數(shù)設(shè)置系統(tǒng)的TIME_WAIT的數(shù)量冗恨,如果超過默認值則會被立即清除。
net.ipv4.route.max_size 內(nèi)核所允許的最大路由數(shù)目味赃。
net.ipv4.ip_forward 接口間轉(zhuǎn)發(fā)報文掀抹。
net.ipv4.ip_default_ttl 報文可以經(jīng)過的最大跳數(shù)。
net.netfilter.nf_conntrack_tcp_timeout_established  讓iptables對于已建立的連接心俗,在設(shè)置時間內(nèi)若沒有活動傲武,那么則清除掉。
net.netfilter.nf_conntrack_max  哈希表項最大值城榛。

注意:不同類型或版本操作系統(tǒng)下上述參數(shù)可能有所不同揪利。

網(wǎng)絡(luò)相關(guān)內(nèi)核參數(shù)引發(fā)的常見問題的處理

Linux NAT 哈希表滿導(dǎo)致服務(wù)器丟包

問題現(xiàn)象

發(fā)現(xiàn) ECS Linux服務(wù)器出現(xiàn)間歇性丟包的情況,通過 tracert狠持、mtr 等手段排查疟位,外部網(wǎng)絡(luò)未見異常。
同時喘垂,如下圖所示献汗,在系統(tǒng)日志中重復(fù)出現(xiàn)大量(kernel nf_conntrack: table full, dropping packet.)錯誤信息:

問題分析

ip_conntrack 是 Linux 系統(tǒng)內(nèi) NAT 的一個跟蹤連接條目的模塊。ip_conntrack 模塊會使用一個哈希表記錄 tcp 通訊協(xié)議的 established connection 記錄王污,當這個哈希表滿了的時候罢吃,便會導(dǎo)致 nf_conntrack: table full, dropping packet 錯誤。

處理辦法

用戶可以 嘗試 參閱如下步驟昭齐,通過修改如下內(nèi)核參數(shù)來調(diào)整 ip_conntrack 限制尿招。

對于 Centos 5.x 系統(tǒng)

1、使用【管理終端】進入服務(wù)器阱驾。

2就谜、在終端下輸入如下指令編輯系統(tǒng)內(nèi)核配置:

# vi /etc/sysctl.conf

3、設(shè)置或修改如下參數(shù):

#哈希表項最大值

net.ipv4.netfilter.ip_conntrack_max = 655350

#超時時間里覆,默認情況下 timeout 是5天(432000秒)

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200

4丧荐、在終端下輸入如下指令使上述配置生效:

# sysctl -p

對于 Centos 6.x 及以上系統(tǒng)

1、使用【管理終端】進入服務(wù)器喧枷;

2虹统、在終端下輸入如下指令編輯系統(tǒng)內(nèi)核配置:

# vi /etc/sysctl.conf

3弓坞、設(shè)置或修改如下參數(shù):

哈希表項最大值

net.netfilter.nf_conntrack_max = 655350

超時時間,默認情況下 timeout 是5天(432000秒)

net.netfilter.nf_conntrack_tcp_timeout_established = 1200

4车荔、在終端下輸入如下指令使上述配置生效:

# sysctl -p

服務(wù)器 message 日志 kernel: TCP: time wait bucket table overflowt 報錯處理方法

問題現(xiàn)象

查詢服務(wù)器 /var/log/message 日志渡冻,發(fā)現(xiàn)全部是類似如下 kernel: TCP: time wait bucket table overflowt 的報錯信息,報錯提示 tcp TIME WAIT 溢出:

問題分析

通過 netstat -anp |grep tcp |wc -l統(tǒng)計 TCP 連接數(shù)忧便。然后對比/etc/sysctl.conf配置文件的net.ipv4.tcp_max_tw_buckets 最大值族吻。看是否有超出情況珠增。

編輯文件vim /etc/sysctl.conf超歌,查詢net.ipv4.tcp_max_tw_buckets 參數(shù)

處理辦法

如果確認連接使用很高,容易超出限制蒂教。則可以將參數(shù) net.ipv4.tcp_max_tw_buckets調(diào)高握础,擴大限制。

最后悴品,在終端下輸入如下指令使上述配置生效:

#sysctl -p

Linux FIN_WAIT2 狀態(tài)的 TCP 鏈接過多解決方法

問題現(xiàn)象

在 HTTP 應(yīng)用中禀综,存在一個問題,SERVER 由于某種原因關(guān)閉連接苔严,如 KEEPALIVE 的超時定枷。這樣,作為主動關(guān)閉的 SERVER 一方就會進入 FIN_WAIT2 狀態(tài)届氢。但 TCP/IP 協(xié)議棧有個問題欠窒,F(xiàn)IN_WAIT2 狀態(tài)是沒有超時的(不象 TIME_WAIT 狀態(tài)),所以如果 CLIENT不關(guān)閉退子,這個 FIN_WAIT_2 狀態(tài)將保持到系統(tǒng)重新啟動岖妄,越來越多的 FIN_WAIT_2 狀態(tài)會致使內(nèi)核 crash。

處理辦法

1寂祥、編輯文件vim /etc/sysctl.conf修改如下內(nèi)容:
net.ipv4.tcp_syncookies = 1  # 表示開啟 SYN Cookies荐虐。當出現(xiàn) SYN 等待隊列溢出時,啟用 cookies 來處理丸凭,可防范少量 SYN 攻擊福扬,默認為 0,表示關(guān)閉惜犀。
net.ipv4.tcp_fin_timeout = 30 # 表示如果套接字由本端要求關(guān)閉铛碑,這個參數(shù)決定了它保持在 FIN-WAIT-2 狀態(tài)的時間。
net.ipv4.tcp_max_syn_backlog = 8192 # 表示 SYN 隊列的長度虽界,默認為 1024汽烦,加大隊列長度為 8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)莉御。
net.ipv4.tcp_max_tw_buckets = 5000 # 表示系統(tǒng)同時保持 TIME_WAIT 套接字的最大數(shù)量撇吞,如果超過這個數(shù)字俗冻,TIME_WAIT 套接字將立刻被清除并打印警告信息。默認為 180000梢夯,改為 5000。
2晴圾、通過sysctl -p命令使參數(shù)生效颂砸。

服務(wù)器上出現(xiàn)大量 CLOSE_WAIT 的原因及解決方法

問題現(xiàn)象

通過命令 netstat -an|grep CLOSE_WAIT|wc -l 查看當前服務(wù)器上處于 CLOSE_WAIT 狀態(tài)的連接數(shù),根據(jù)服務(wù)器上的業(yè)務(wù)量來判斷 CLOSE_WAIT 數(shù)量是否超出了正常的范圍死姚。
問題原因

TCP連接斷開時需要進行四次揮手人乓,TCP連接的兩端都可以發(fā)起關(guān)閉連接的請求,若對端發(fā)起了關(guān)閉連接都毒,但本地沒有進行后續(xù)的關(guān)閉連接操作色罚,那么該鏈接就會處于CLOSE_WAIT狀態(tài)。雖然該鏈接已經(jīng)處于半開狀態(tài)账劲,但是已經(jīng)無法和對端通信戳护,需要及時的釋放掉該鏈接。

解決方法

建議從業(yè)務(wù)層面及時判斷某個連接是否已經(jīng)被對端關(guān)閉瀑焦,即在程序邏輯中對連接及時進行關(guān)閉檢查腌且。

Java 中 IO 可以通過 read 方法來判斷,當 read 方法返回 -1 時則表示流已經(jīng)到達末尾榛瓮,可以使用 close 方法關(guān)閉該鏈接铺董。C 語言中檢查 read 的返回值,若是 0 則可以關(guān)閉該連接禀晓,若小于 0 則查看一下 errno精续,若不是 AGAIN 則同樣可以關(guān)閉連接。

服務(wù)器上出現(xiàn)大量 TIME_WAIT 的原因及解決方法

問題現(xiàn)象

通過 netstat 或 ss 粹懒,可以看到有大量處于 TIME_WAIT 狀態(tài)的連接重付。

問題分析

可以通過如下命令查看 TIME_WAIT 數(shù)量:

netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

處理辦法

1、編輯文件vim /etc/sysctl.conf凫乖,修改或加入以下內(nèi)容:

net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
2堪夭、然后執(zhí)行 /sbin/sysctl -p讓參數(shù)生效。

net.ipv4.tcp_fin_timeout 修改導(dǎo)致的 TCP 連接異常排查

問題現(xiàn)象

服務(wù)端 A 與客戶端 B 建立了 TCP 連接拣凹,之后森爽,服務(wù)端 A 主動斷開了連接,但是在客戶端 B 上仍然看到連接是建立的嚣镜。

問題原因

通常是由于修改了服務(wù)端內(nèi)核參數(shù) net.ipv4.tcp_fin_timeout 默認設(shè)置所致爬迟。

處理辦法

編輯文件vim /etc/sysctl.conf ,修改如下設(shè)置:

net.ipv4.tcp_fin_timeout=30

最后菊匿,使用命令 sysctl -p 使配置生效即可付呕。

內(nèi)核配置問題導(dǎo)致 NAT 環(huán)境訪問異常

問題現(xiàn)象

用戶在其本地網(wǎng)絡(luò)環(huán)境通過 SSH 無法連接 ECS Linux 服務(wù)器计福,或者訪問該 Linux 服務(wù)器上承載的 HTTP 業(yè)務(wù)出現(xiàn)異常。 telent 測試也會被 reset徽职。

問題原因

如果用戶本地網(wǎng)絡(luò)是通過 NAT 共享的方式上網(wǎng)象颖,該問題可能是由于用戶本地 NAT 環(huán)境和目標 Linux 相關(guān)內(nèi)核參數(shù)配置不匹配導(dǎo)致的。

處理辦法

可以嘗試通過如下方式修改目標 Linux 服務(wù)器的內(nèi)核參數(shù)來解決該問題:

1姆钉、遠程連接目標 Linux说订;

2、查看當前配置:

cat /proc/sys/net/ipv4/tcp_tw_recyclecat /proc/sys/net/ipv4/tcp_timestamps
查看上述兩個配置的值【是不是0】潮瓶,如果為 1 的話陶冷,NAT 環(huán)境下的請求可能會導(dǎo)致上述問題。

3毯辅、通過如下方式將上述參數(shù)值修改為 0:

vi /etc/sysctl.conf
添加如下內(nèi)容:

net.ipv4.tcp_tw_recycle=0net.ipv4.tcp_timestamps=0
4埂伦、使用如下指令使配置生效:

sysctl -p
5、上述配置修改后思恐,再重新做 SSH 登錄或者業(yè)務(wù)訪問測試沾谜。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胀莹,隨后出現(xiàn)的幾起案子类早,更是在濱河造成了極大的恐慌,老刑警劉巖嗜逻,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩僻,死亡現(xiàn)場離奇詭異,居然都是意外死亡栈顷,警方通過查閱死者的電腦和手機逆日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萄凤,“玉大人室抽,你說我怎么就攤上這事∶遗” “怎么了坪圾?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惑朦。 經(jīng)常有香客問我兽泄,道長,這世上最難降的妖魔是什么漾月? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任病梢,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜓陌。我一直安慰自己觅彰,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布钮热。 她就那樣靜靜地躺著填抬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天目锭,我揣著相機與錄音,去河邊找鬼读拆。 笑死擅憔,一個胖子當著我的面吹牛鸵闪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暑诸,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚌讼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了个榕?” 一聲冷哼從身側(cè)響起篡石,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎西采,沒想到半個月后凰萨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡械馆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年胖眷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霹崎。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡珊搀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尾菇,到底是詐尸還是另有隱情境析,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布派诬,位于F島的核電站劳淆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏默赂。R本人自食惡果不足惜憔儿,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望放可。 院中可真熱鬧谒臼,春花似錦朝刊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至底哥,卻和暖如春咙鞍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趾徽。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工续滋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孵奶。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓疲酌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親了袁。 傳聞我的和親對象是個殘疾皇子朗恳,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容