Linux高并發(fā)場(chǎng)景下的網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)實(shí)戰(zhàn)指南
一、問(wèn)題背景:當(dāng)并發(fā)連接遇上性能瓶頸
1.1 案例環(huán)境
- 服務(wù)器配置:
vCPU: 8核 | 內(nèi)存: 16GB | 網(wǎng)絡(luò)帶寬: 4Gbps | PPS: 80萬(wàn)
- 觀測(cè)到的異?,F(xiàn)象:
TIME_WAIT
連接堆積(2464個(gè))- 存在
CLOSE_WAIT
連接(4個(gè)) - 偶發(fā)新連接建立超時(shí)
1.2 初始參數(shù)分析
通過(guò)sysctl
查看到的原始配置:
net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 131072 net.ipv4.ip_local_port_range = 1024 61999
關(guān)鍵缺陷:半連接隊(duì)列小、端口范圍窄、緩沖區(qū)限制嚴(yán)。
二、深度診斷:連接狀態(tài)與內(nèi)核參數(shù)
2.1 連接狀態(tài)監(jiān)控技巧
實(shí)時(shí)統(tǒng)計(jì)TCP狀態(tài)
watch -n 1 'netstat -ant | awk '\''/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'\'''
輸出示例:
ESTABLISHED 790 TIME_WAIT 2464 SYN_RECV 32 # 半連接重點(diǎn)關(guān)注!
半連接專項(xiàng)檢查
# 查看SYN_RECV連接詳情 ss -ntp state syn-recv # 監(jiān)控隊(duì)列溢出 netstat -s | grep -i 'listen drops'
2.2 關(guān)鍵參數(shù)解讀
參數(shù) | 作用 | 默認(rèn)值問(wèn)題 |
---|---|---|
tcp_max_syn_backlog | 半連接隊(duì)列長(zhǎng)度 | 8192(突發(fā)流量易滿) |
somaxconn | 全連接隊(duì)列長(zhǎng)度 | 需與應(yīng)用backlog參數(shù)匹配 |
tcp_tw_reuse | 快速?gòu)?fù)用TIME_WAIT端口 | 默認(rèn)關(guān)閉(導(dǎo)致端口耗盡) |
tcp_rmem /tcp_wmem | 讀寫緩沖區(qū)大小 | 最大值僅6MB(影響吞吐) |
三、調(diào)優(yōu)方案:從參數(shù)到實(shí)踐
3.1 連接管理優(yōu)化
解決TIME_WAIT堆積
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf echo "net.ipv4.tcp_max_tw_buckets = 262144" >> /etc/sysctl.conf echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf
縮短連接回收時(shí)間
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
3.2 隊(duì)列與緩沖區(qū)優(yōu)化
擴(kuò)大連接隊(duì)列
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf echo "net.core.netdev_max_backlog = 10000" >> /etc/sysctl.conf
調(diào)整內(nèi)存緩沖區(qū)
cat >> /etc/sysctl.conf <<EOF net.ipv4.tcp_mem = 8388608 12582912 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 EOF
3.3 Keepalive與超時(shí)優(yōu)化
echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_intvl = 30" >> /etc/sysctl.conf
四、驗(yàn)證與監(jiān)控
4.1 實(shí)時(shí)監(jiān)控腳本
連接狀態(tài)看板
#!/bin/bash while true; do clear date echo "---- TCP狀態(tài) ----" netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' echo "---- 半連接隊(duì)列 ----" ss -ltn | awk 'NR>1 {print "Listen隊(duì)列: Recv-Q="$2", Send-Q="$3}' echo "---- 端口使用率 ----" echo "已用端口: $(netstat -ant | grep -v LISTEN | awk '{print $4}' | cut -d: -f2 | sort -u | wc -l)/$((65000-1024))" sleep 5 done
內(nèi)核告警規(guī)則(Prometheus示例)
4.2 壓測(cè)建議
使用wrk
模擬高并發(fā):
wrk -t16 -c10000 -d60s http://service:8080
監(jiān)控重點(diǎn)指標(biāo):
SYN_RECV
數(shù)量波動(dòng)netstat -s
中的丟包計(jì)數(shù)- 內(nèi)存使用率(
free -m
)
五、避坑指南
5.1 常見誤區(qū)
盲目啟用
tcp_tw_recycle
NAT環(huán)境下會(huì)導(dǎo)致連接失敗(已從Linux 4.12移除)緩沖區(qū)過(guò)大引發(fā)OOM
需根據(jù)內(nèi)存調(diào)整tcp_mem
:
# 計(jì)算安全值(單位:頁(yè),1頁(yè)=4KB) echo $(( $(free -m | awk '/Mem:/ {print $2}') * 1024 / 4 / 3 )) >> /proc/sys/net/ipv4/tcp_mem
5.2 參數(shù)依賴關(guān)系
somaxconn
需≥應(yīng)用層的backlog
例如Nginx需同步調(diào)整:
listen 80 backlog=65535;
六、總結(jié)
通過(guò)本文的調(diào)優(yōu)實(shí)踐,我們實(shí)現(xiàn)了:
- TIME_WAIT連接減少70%
- 最大并發(fā)連接數(shù)提升至3萬(wàn)+
- 網(wǎng)絡(luò)吞吐量增長(zhǎng)2倍
以上就是Linux高并發(fā)場(chǎng)景下的網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Linux網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Ubuntu14.04 opencv2.4.8和opencv3.3.1多版本共存的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Ubuntu14.04 opencv2.4.8和opencv3.3.1多版本共存的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Linux系統(tǒng)下 centos7下搭建ElasticSearch中間件及常用接口演示
ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。這篇文章主要介紹了Linux系統(tǒng)下 centos7下搭建ElasticSearch中間件及常用接口演示 ,需要的朋友可以參考下2019-07-07#實(shí)踐筆記#Ubuntu配置Apache+PHP+MySQL
在我早先的一篇文章《#實(shí)踐筆記#本地配置PHPnow與WordPress》,已經(jīng)討論過(guò)PHPnow的本地安裝教程。但是PHPnow套件是Windows平臺(tái)下的軟件,不適用我現(xiàn)在使用的平臺(tái)2012-03-03如何在Linux環(huán)境為用戶添加sudo權(quán)限
這篇文章主要介紹了如何在Linux環(huán)境為用戶添加sudo權(quán)限,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Ubuntu LTS服務(wù)器部署Jenkins詳細(xì)介紹
這篇文章主要介紹了Ubuntu LTS服務(wù)器部署Jenkins詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03CentOS下Lighttpd Web服務(wù)器安裝與配置方法
CentOS下Lighttpd Web服務(wù)器安裝與配置方法,需要的朋友可以參考下。2011-04-04