日志中存在大量的連接超時(shí)內(nèi)容:
errorMsg=Connect to api.10646.cn:443 [api.10646.cn/122.97.213.18] failed: connect timed out
首先使用telnet排除客戶端原因
telnet api.10646.cn 443 阻塞
telnet www.baidu.com 443 正常
說明客戶端是正常的糜俗,很可能是被服務(wù)器限制了
查看與服務(wù)器122.97.213.18之間的連接狀態(tài)
netstat -n | grep 122.97.213.18 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
發(fā)現(xiàn)結(jié)果中存在大量CLOSE_WAIT連接笨篷,CLOSE_WAIT:對(duì)方主動(dòng)關(guān)閉連接或者網(wǎng)絡(luò)異常導(dǎo)致連接中斷,這時(shí)我方的狀態(tài)會(huì)變成CLOSE_WAIT知牌,此時(shí)我方要調(diào)用close()來使得連接正確關(guān)閉毛萌。
猜測(cè)
每次調(diào)用請(qǐng)求之后肖抱,對(duì)方都直接斷開了連接灸促,而我方還持有該連接,可能是因?yàn)槭褂昧诉B接池升薯,并且清除CLOSE_WAIT狀態(tài)連接有延時(shí)莱褒,導(dǎo)致連接積壓了。同時(shí)覆劈,對(duì)方服務(wù)器限制了單IP能夠建立的連接上限保礼,舊連接未斷開的情況下,導(dǎo)致創(chuàng)建新連接超時(shí)责语。
解決
每次請(qǐng)求之后主動(dòng)調(diào)用close()關(guān)閉連接炮障。