Connection reset
報(bào)錯(cuò)原理
服務(wù)器端因?yàn)槟撤N原因關(guān)閉了Connection纪铺,而客戶(hù)端依然在讀寫(xiě)數(shù)據(jù),此時(shí)服務(wù)器會(huì)返回復(fù)位標(biāo)志“RST”,然后此時(shí)客戶(hù)端就會(huì)提示“java.net.SocketException: Connection reset”。
產(chǎn)生原因
服務(wù)器的并發(fā)連接數(shù)超過(guò)了其承載量,服務(wù)器會(huì)將其中一些連接關(guān)閉震束;
防火墻的問(wèn)題
如果網(wǎng)絡(luò)連接通過(guò)防火墻,而防火墻一般都會(huì)有超時(shí)的機(jī)制当犯,在網(wǎng)絡(luò)連接長(zhǎng)時(shí)間不傳輸數(shù)據(jù)時(shí)垢村,會(huì)關(guān)閉這個(gè)TCP的會(huì)話,關(guān)閉后在讀寫(xiě)嚎卫,就會(huì)導(dǎo)致異常嘉栓。 如果關(guān)閉防火墻,解決了問(wèn)題拓诸,需要重新配置防火墻侵佃,或者自己編寫(xiě)程序?qū)崿F(xiàn)TCP的長(zhǎng)連接。實(shí)現(xiàn)TCP的長(zhǎng)連接奠支,需要自己定義心跳協(xié)議馋辈,每隔一段時(shí)間,發(fā)送一次心跳協(xié)議倍谜,雙方維持連接迈螟。
解決方案:調(diào)整TCP連接數(shù)(未實(shí)施)
Windows 下單機(jī)最大TCP連接數(shù)
調(diào)整系統(tǒng)參數(shù)來(lái)調(diào)整單機(jī)的最大TCP連接數(shù),Windows 下單機(jī)的TCP連接數(shù)有多個(gè)參數(shù)共同決定:
以下都是通過(guò)修改注冊(cè)表[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
1.最大TCP連接數(shù) TcpNumConnections
2.TCP關(guān)閉延遲時(shí)間 TCPTimedWaitDelay (30-240)s
3.最大動(dòng)態(tài)端口數(shù) MaxUserPort (Default = 5000, Max = 65534) TCP客戶(hù)端和服務(wù)器連接時(shí)尔崔,客戶(hù)端必須分配一個(gè)動(dòng)態(tài)端口答毫,默認(rèn)情況下這個(gè)動(dòng)態(tài)端口的分配范圍為 1024-5000 ,也就是說(shuō)默認(rèn)情況下季春,客戶(hù)端最多可以同時(shí)發(fā)起3977 Socket 連接
4.最大TCB 數(shù)量 MaxFreeTcbs
系統(tǒng)為每個(gè)TCP 連接分配一個(gè)TCP 控制塊(TCP control block or TCB)洗搂,這個(gè)控制塊用于緩存TCP連接的一些參數(shù),每個(gè)TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool载弄,也就說(shuō)耘拇,每個(gè)TCP連接會(huì)占用 1KB 的系統(tǒng)內(nèi)存。
非Server版本宇攻,MaxFreeTcbs 的默認(rèn)值為1000 (64M 以上物理內(nèi)存)Server 版本驼鞭,這個(gè)的默認(rèn)值為 2000。也就是說(shuō)尺碰,默認(rèn)情況下,Server 版本最多同時(shí)可以建立并保持2000個(gè)TCP 連接。
- 最大TCB Hash table 數(shù)量 MaxHashTableSize TCB 是通過(guò)Hash table 來(lái)管理的亲桥。
這個(gè)值指明分配 pagepool 內(nèi)存的數(shù)量洛心,也就是說(shuō),如果MaxFreeTcbs = 1000 , 則 pagepool 的內(nèi)存數(shù)量為 500KB那么 MaxHashTableSize 應(yīng)大于 500 才行题篷。這個(gè)數(shù)量越大词身,則Hash table 的冗余度就越高,每次分配和查找 TCP 連接用時(shí)就越少番枚。這個(gè)值必須是2的冪法严,且最大為65536.
IBM WebSphere Voice Server 在windows server 2003 下的典型配置
MaxUserPort = 65534 (Decimal)
MaxHashTableSize = 65536 (Decimal)
MaxFreeTcbs = 16000 (Decimal)
這里我們可以看到 MaxHashTableSize 被配置為比MaxFreeTcbs 大4倍,這樣可以大大增加TCP建立的速度葫笼。
Connection refused: connect
原因:具有ip地址的機(jī)器不能找到
解決辦法:ping ip:port是否通暢
Socket is closed
己方主動(dòng)關(guān)閉了連接后,仍然進(jìn)行讀寫(xiě)操作