回覆列表
  • 1 # 使用者8107137581681

    Socket.Listen方法用於將 Socket 置於偵聽狀態

    backlog(樓主說的引數)

    掛起連線佇列的最大長度。

    backlog 引數指定佇列中最多可容納的等待接受的傳入連線數。若要確定可指定的最大連線數,要參照 MaxConnections 值

    程式程式碼:

    // create the socket

    Socket listenSocket = new Socket(AddressFamily.InterNetwork,

    SocketType.Stream,

    ProtocolType.Tcp);

    // bind the listening socket to the port

    IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];

    IPEndPoint ep = new IPEndPoint(hostIP, port);

    listenSocket.Bind(ep);

    // start listening

    listenSocket.Listen(backlog);

    考慮預設值為5明顯應該是MaxConnections 。

    後面的測試驗證,就是這個引數非常的致命,在修改為200之後,tps直接*2。

    返回來分析這個引數,預設最多容許有5個空閒長連線。考慮到100個工作執行緒,正常應該長連線數目也在100附近,考慮每次請求都要先申請一個連線,用完

    之後再放回,100個工作執行緒同時操作,很有可能同時將超過5個的連線返還給連線池。如果伺服器簡單的判斷說多於5個連線然後就立即close並釋放長連

    接,那麼就會出現一方面連續釋放長連線,一方面因為連線數不夠不停的建立新的長連線。

    換言之,當100個執行緒併發在連線池中進行申請連線/返還連線的過程中,連線池內的可用連線數是時刻變化的,實際的數目會有大的波動。而預設的最大空閒引數過小(預設才5)使得這個波動有極大的機率突破限制,從而造成連線池進行不必要的釋放所謂過多的“空閒”連線。

  • 中秋節和大豐收的關聯?
  • Jmeter和LoadRunner的異同?