標籤:介面 nginx app 連線逾時
內網有一台APP伺服器,介面是通過Nginx發布的。手機通過無線登陸APP,有時候提示連線逾時。
無線路由器和APP伺服器,是通過內網交換器串連的。應該不會逾時啊,可能是路由器問題。
然後換了好幾個路由器,小米mini,華碩RT-AC87U,TP-LINK WVR1750G
諮詢廠商,測試了一下,當時逾時的時候,訪問百度視頻什麼的是正常的。路由器沒有問題,可能是伺服器問題。因為伺服器是pc機主機,配置比較差,後來換成DELL R620,還是同樣的問題。
因為公司周圍有30幾個無線,2.4G傳輸速度是450M,可能是無線幹擾問題。
最後買了一個Nighthawk X6 R8000,2.4G傳輸速度是600M,發現還是有逾時。
網上搜尋資料nginx逾時問題,最佳化了一些參數,發現還是有逾時。
手機安裝(Ping & DNS)軟體,版本是2.3,用TCP Ping持續測試dts.xx.com,
大約1~2分鐘,提示connection timed out,逾時會持續一分鐘。出現逾時的時候,手機登陸APP,就會提示連線逾時。
然後逾時的時候,在伺服器抓包
[[email protected] ~]#tcpdump -i eth0 -s0 -w a.cap
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/B2/wKioL1WDfjPw4qxQAAGMLHi9UR8507.jpg" title="viewfile.png" alt="wKioL1WDfjPw4qxQAAGMLHi9UR8507.jpg" />
發現無線路由器向伺服器發送了SYN請求包,但是沒有得到伺服器回應。
出現TCP Retransmission(TCP 包重傳)
因為伺服器開啟了tcp_tw_recycle(為了支援高並發)
tcp請求回收,如果開了這個,那在預設60s內同一個ip包過來是會被回收的
網路過來的資料包的時間肯定是小於這個請求時間的,那麼伺服器就會認為他是無效的串連,就會拒絕串連,所以才會出現TCP包重傳。
所以才會出現上面的現象,逾時持續一分鐘。
後來我把tcp_tw_recycle關了
vi /etc/sysctl.conf
設定為0,表示關閉
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
載入配置
[[email protected] ~]#sysctl -p
最後再次用TCP Ping測試,測試20分鐘,沒有出現連線逾時。
APP重新整理資料,也沒有出現逾時。
哎,解決這個問題,之前都是靠瞎猜的。分析問題沒有層層刨析,搞了這麼長時間,才搞定。
路由器只提供資料轉寄功能,只要轉寄了,它的任務就完成了。
應該是伺服器問題,然後抓包,為什麼伺服器沒有回應?
為什麼出現TCP Retransmission(TCP 包重傳)?
這樣問題就越來越接近真相了,就好解決了,就好像福爾摩斯一樣。
後來發現系統日誌出現
Jun 19 11:13:45 127.0.0.1TCP: time wait bucket table overflow
那就只能增加net.ipv4.tcp_max_tw_buckets的值
net.ipv4.tcp_max_tw_buckets = 100000
載入配置
[[email protected] ~]#sysctl -p
再次觀察,就沒有了。
本文出自 “隕落星空” 部落格,請務必保留此出處http://xiao987334176.blog.51cto.com/2202382/1663462
Nginx APP介面連線逾時