亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

linux上TCP connection timeout問題解決辦法

2024-09-05 23:03:47
字體:
來源:轉載
供稿:網友

 linux上TCP connection timeout問題解決辦法

最近在產線上經常出現connection timeout的問題,先看看Java 中關于connection timeout 的異常如何產生

JAVA中的timeout

java.net.SocketTimeoutException: connect timed out 客戶端異常:connect timed out   at java.net.PlainSocketImpl.socketConnect(Native Method)   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)   at java.net.Socket.connect(Socket.java:589) 

我們能經??吹降腸onnect timed out異常產生,看一下java 是如何生成這個異常

plainsocketimpl.c 中

while (1) {         jlong newTime; #ifndef USE_SELECT         {           struct pollfd pfd;           pfd.fd = fd;           pfd.events = POLLOUT;            errno = 0;           connect_rv = NET_Poll(&pfd, 1, timeout);         } #else         {           fd_set wr, ex;           struct timeval t;            t.tv_sec = timeout / 1000;           t.tv_usec = (timeout % 1000) * 1000;            FD_ZERO(&wr);           FD_SET(fd, &wr);           FD_ZERO(&ex);           FD_SET(fd, &ex);            errno = 0;           connect_rv = NET_Select(fd+1, 0, &wr, &ex, &t);         } #endif          if (connect_rv >= 0) {           break;         }         if (errno != EINTR) {           break;         }          /*          * The poll was interrupted so adjust timeout and          * restart          */         newTime = JVM_CurrentTimeMillis(env, 0);         timeout -= (newTime - prevTime);         if (timeout <= 0) {           connect_rv = 0;           break;         }         prevTime = newTime;        } /* while */        if (connect_rv == 0) {         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",               "connect timed out");          /*          * Timeout out but connection may still be established.          * At the high level it should be closed immediately but          * just in case we make the socket blocking again and          * shutdown input & output.          */         SET_BLOCKING(fd);         JVM_SocketShutdown(fd, 2);         return;       } 

這里可以看到在做connect的時候,是調用 NET_Poll 或者 NET_Select, 在linux 上就是使用 poll/select

當發生timeout的時候connect_rv=0  ,這里有個注意點雖然在poll/select 是傳入timeout的時間,但是這是會被打斷的,connect_rv返回的值為-1 ,所以jvm里面重新計算了timeout , 確保timeout 的時間片已經運行完了,才推出循環。

newTime = JVM_CurrentTimeMillis(env, 0);         timeout -= (newTime - prevTime);         if (timeout <= 0) {           connect_rv = 0;           break;         } 

同時設置connect_rv 為0, 也是下面只有當connect_rv為0的時候才拋出connect timeout

什么是connect timeout ?

也就是client 發出 syn 包,server端在你指定的時間內沒有回復ack,poll/select 返回0

server 端為什么沒有回復ack, 因為syn包的回復是內核層的,要么網絡層丟包,要么就是內核層back_log的queue滿了,關于backlog在本片中就不詳細描述了。

當時查看產線上的連接最高能到1000多,同時查看了backlog 的queue的大小

cat /proc/sys/net/ipv4/tcp_max_syn_backlog 

有8192 在產線上沒有這么多的客戶端的連接,不可能backlog queue會滿,雖然syn_backlog 的設置是8192 但并不代表服務器啟動的時候設置成了8192,所以必須查這個端口所設置的backlog大小

ss -lt 

看到Send-Q在8080端口是128 ,原來在服務器端啟動listen 的時候設置了128的backlog

查看tomcat 的配置,默認bio的設置

<Connector executor="tomcatThreadPool"       port="8080"          protocol="HTTP/1.1"           acceptCount="5000"           connectionTimeout="25000"           maxHttpHeaderSize="8192"           useBodyEncodingForURI="true"           enableLookups="false"            redirectPort="8443"            URIEncoding="UTF-8"            maxThreads="500"           maxKeepAliveRequests="1000"           keepAliveTimeout="30000"         /> 

產線上已經設置了acceptCount, 默認是100 但是這里設置了是5000 ,這與通過ss看到的send-q的結果嚴重不符合
通過內核代碼分析,發現原來內核參數不僅僅是通過tcp_max_syn_backlog控制,同時也受somaxconn控制
查看

cat /proc/sys/net/core/somaxconn 

發現值是128, OK 原因找到了,修改/etc/sysctl.conf 添加

net.core.somaxconn = 8192 

sysctl -f /etc/sysctl.conf 重新加載一下,這樣就能改變全局了

問題:是1000多個連接,500個工作線程,因為backlog的大小是受socket.accept控制的,我們通常境況下會單獨起一個線程去serversocket.accept(),而當前server的load并不高,不因該會出現back_log queue出現滿的情況,更何況只有1000多個連接,代碼就是真相,查看tomcat的源碼。

原來accptor 線程在accept 之前,會去countUpOrWaitConnection 發現接受到的的socket數目大于設置的work線程數目的時候,會停止accept.

<strong>countUpOrAwaitConnection</strong>();           Socket socket = null;          try {            // Accept the next incoming connection from the server            // socket            socket = serverSocketFactory.acceptSocket(serverSocket);          } catch (IOException ioe) {            countDownConnection();            // Introduce delay if necessary            errorDelay = handleExceptionWithDelay(errorDelay);            // re-throw            throw ioe;          } 

也就是說當并發超過628個連接以上,就有可能出現backlog queue滿的情況,而出現connect timeout的情況,一切皆清楚了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97超碰国产精品女人人人爽| 亚洲第一av网站| 91久久精品美女| 国产精品电影在线观看| 国产精品久久电影观看| 欧美精品久久久久久久久久| 亚洲国模精品一区| 91亚洲午夜在线| 欧美日韩美女在线| 国产精品女主播视频| 日本不卡高字幕在线2019| 日韩电影网在线| 国产精品视频内| 亚洲欧美国产一本综合首页| 欧美大片va欧美在线播放| 97超级碰在线看视频免费在线看| 国产成人小视频在线观看| 国内精品久久久久| 黑人精品xxx一区一二区| 成人高h视频在线| 国产免费久久av| 亚洲欧美制服中文字幕| 欧美—级高清免费播放| 亚洲国产成人精品电影| 精品国产31久久久久久| 色偷偷噜噜噜亚洲男人| 日韩av免费在线看| 国产mv久久久| 欧美在线一级视频| 日韩av手机在线观看| 国产精品久久久久aaaa九色| 91在线视频导航| 精品偷拍一区二区三区在线看| 久久久久久久电影一区| 一本色道久久综合狠狠躁篇的优点| 久久久久久91香蕉国产| 国产91精品最新在线播放| 国产精品精品久久久| 欧美亚洲另类视频| 不卡av在线播放| 岛国视频午夜一区免费在线观看| 久久久久亚洲精品成人网小说| 日韩欧美国产一区二区| 日本午夜在线亚洲.国产| 日韩高清电影免费观看完整版| 欧美成人免费一级人片100| 亚洲午夜女主播在线直播| 国产69精品久久久久9| 精品国偷自产在线| 国产精品手机播放| 91欧美激情另类亚洲| 国产精品第七十二页| 91久久精品久久国产性色也91| 国产69久久精品成人看| 在线播放精品一区二区三区| 九色精品美女在线| 中文字幕欧美日韩精品| 亚洲精品日韩丝袜精品| 91av在线精品| 成人美女av在线直播| 久久综合色88| 国产亚洲精品成人av久久ww| 亚洲最大在线视频| 日韩美女视频免费在线观看| 欧美国产日韩xxxxx| 自拍偷拍亚洲精品| 成人黄色午夜影院| 国内精品国产三级国产在线专| 亚洲第一视频网站| 国产精品天天狠天天看| 国产在线精品播放| 亚洲在线第一页| 欧美性猛交xxxx乱大交蜜桃| 91在线观看免费网站| 亚洲欧洲日产国码av系列天堂| 亚洲а∨天堂久久精品9966| 中文字幕在线精品| 亚洲国产成人爱av在线播放| 国产精品海角社区在线观看| 91国产美女在线观看| 91免费精品视频| 中文字幕九色91在线| 亚洲精品久久久久久久久久久| 亚洲黄色www| 亚洲国产福利在线| 一本色道久久88综合亚洲精品ⅰ| 成人女保姆的销魂服务| 精品国内产的精品视频在线观看| 国产精品第一页在线| 久久伊人免费视频| 欧美人成在线视频| 国产欧美日韩免费看aⅴ视频| 国产91在线视频| 日韩精品免费在线视频| 国产在线视频一区| 日本高清不卡在线| 国产美女久久精品| 中文字幕亚洲字幕| 91精品在线国产| 91免费精品视频| 亚洲综合小说区| 亚洲精品一区二区在线| www亚洲精品| 成人黄色av播放免费| 91青草视频久久| 97香蕉超级碰碰久久免费的优势| 欧美亚洲视频一区二区| 欧美另类高清videos| 97av在线视频免费播放| 国产精品女视频| 日韩有码片在线观看| 国产亚洲视频在线| 成人在线一区二区| 日韩中文字幕av| 欧美成人网在线| 欧美激情乱人伦一区| 国产精品入口夜色视频大尺度| 亚洲一区二区免费在线| 欧美xxxx14xxxxx性爽| 日韩大片免费观看视频播放| 亚洲欧美另类国产| 国内精品久久久久影院优| 久久69精品久久久久久国产越南| 日韩亚洲欧美中文高清在线| 亚洲精品久久久久久久久久久久久| 色一区av在线| 国产精品福利网站| 成人写真视频福利网| 一道本无吗dⅴd在线播放一区| 久久精品99久久久久久久久| 日韩精品在线免费| 97视频免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品成人播放| 国产98色在线| 欧美三级免费观看| 国产精品第七影院| 欧美电影免费播放| 韩国19禁主播vip福利视频| 丝袜一区二区三区| 日韩国产精品亚洲а∨天堂免| 久久久久久亚洲精品中文字幕| 国产亚洲欧洲高清| 国产热re99久久6国产精品| 欧美日韩国产第一页| 欧美视频精品一区| 日韩精品在线免费观看视频| 欧美性在线观看| 日本伊人精品一区二区三区介绍| 中文字幕国产亚洲| 97在线免费观看视频| 91亚洲va在线va天堂va国| 国产98色在线| 日韩av在线导航| 久久视频在线看| 欧美性猛xxx| 欧美成人黄色小视频| 在线观看欧美日韩国产| 亚洲成年人在线播放| www.欧美免费| 欧美人与性动交| 亚洲护士老师的毛茸茸最新章节| 成人久久一区二区三区| 国产精品久久久av久久久|