曾經(jīng)遇到過一個問題,在一次性能測試過程中,使用http協(xié)議的多用戶向服務(wù)器發(fā)送請求。設(shè)置了持續(xù)時間,出現(xiàn)錯誤為:vuser_init.c(20): 錯誤 -27796: 連接服務(wù)器“localhost”失敗: [10060] Connection timed out
因?yàn)樨?fù)載生成器的性能太好,發(fā)數(shù)據(jù)包特別快,服務(wù)器也響應(yīng)特別快,從而導(dǎo)致負(fù)載生成器的機(jī)器的端口在沒有timeout之前就全部占滿了。在全部占滿后,就會出現(xiàn)上面的錯誤。執(zhí)行netstat –na命令,可以看到打開了很多端口。所以就調(diào)整TCP的time out。即在最后一個端口還沒有用到時,前面已經(jīng)有端口在釋放了。
[b]官方的troubleshooting:[/b]
查看工具的troubleshooting,如下:[code]Message Code 27796
Failed to connect to server 'hostname';port_ld': 'reason'.
Unable to connect to the specified server and port.
Troubleshooting
o Try to address the reason provided for the connection failure.
o Try to access the application with a browser from the injector machine and from another machine (such as the recording machine).
o Check that you accurately specified the correct host name and port.
o Ping the host/port.
o Check if the server application you are trying to access is running.
o If you used a hostname, check if it was resolved to the correct address.
o Check if the server application is listening to the right port. [/code]均不是解決之道。
[b]成功的解決方法:[/b]
在注冊表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里,有如下兩個鍵值:
TcpTimedWaitDelay
MaxUserPort
1,這里的TcpTimedWaitDelay默認(rèn)值應(yīng)該中是30s,所以這里,把這個值調(diào)小為5s(按需要調(diào)整)。
2,也可以把MaxUserPort調(diào)大(如果這個值不是最大值的話)。
反復(fù)驗(yàn)證,問題解決。
TcpTimedWaitDelay 值決定了 TCP/IP 必須經(jīng)過多久,才能釋出已關(guān)閉的連線及重複使用它的資源。這個關(guān)閉和釋出的間隔稱為 TIME_WAIT 狀態(tài),或是區(qū)段生命期限上限 (2MSL) 狀態(tài)的兩倍。在這段時間內(nèi),通往用戶端和伺服器的連線重新開啟的成本,比建立新的連線低。藉由縮減這個項(xiàng)目的值,TCP/IP 可以更快釋出已關(guān)閉的連線,提供更多資源給新的連線。如果執(zhí)行中的應(yīng)用程式需要快速釋出、建立新連線,或多個連線在 TIME_WAIT 狀態(tài)中造成通訊量太低,因而需要進(jìn)行調(diào)整的話,請調(diào)整這個參數(shù)。
預(yù)設(shè)值是 0xF0,它會將等待時間設(shè)為 240 秒(4 分鐘)。
最小的建議值是 0x1E,它會將等待時間設(shè)為 30 秒。請利用這個程序來檢視或自訂您的值。
啟動 regedit 指令,瀏覽至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 登錄次機(jī)碼,建立名稱為 TcpTimedWaitDelay 的新 REG_DWORD 值。
將值設(shè)為十進(jìn)位 30,也就是十六進(jìn)位的 0x0000001e。這個值會將等待時間設(shè)為 30 秒。
關(guān)閉登錄編輯器。
停止並重新啟動系統(tǒng)。
MaxUserPort
MaxUserPort 值決定了當(dāng)應(yīng)用程式向系統(tǒng)要求可用的使用者埠時,TCP/IP 所能指派的最高埠號。如果您的系統(tǒng)報(bào)告建立 Socket 時,發(fā)生錯誤異常狀況,可能是匿名(短期)埠的數(shù)量不當(dāng)所造成,當(dāng)系統(tǒng)開啟大量的埠來建立 Web 服務(wù)、資料庫或其他遠(yuǎn)端資源的連線時,尤其如此。