2015-04-03 65 views
11

我們正在嘗試增加TCP遠程處理所使用的線程數。我們嘗試過更改ThreadPool.SetMinThreads,但我們的壓力測試顯示.NET Remoting只能處理約100個併發請求。 (但這不是硬性限制)。在任務管理器中,我們可以看到我們的遠程處理服務器進程的線程數從11增加到80,然後在壓力測試之後降到11。我們正在運行一個ASP.NET 4.0應用程序。如何增加TCP遠程處理所使用的線程數?

+0

我有幾個問題。 1.你使用什麼類型的遠程對象? Singleton,SingleCall,客戶端或服務器被激活?我不確定我是否正確理解你。線程數下降對你來說是一個問題。 3.你的機器有多少個處理器/內核?我是否正確使用IIS來託管遠程對象? 5.爲什麼你想要有這麼多的線程?你想提高性能嗎? – 2015-04-08 08:11:21

+1

SingleCall。客戶端激活。 16核心。 IIS承載遠程客戶端。 Windows服務託管遠程服務器。我們希望提高性能,因爲我們注意到一次只能通過遠程管道擠滿100個請求(即使這些請求除了Thread.Sleep之外什麼也不做)。 – meub 2015-04-08 20:33:54

+0

我想問一下另外2件事情。 1。我說對了,你在遠程服務器上使用了'ThreadPool.SetMinThread'嗎? 2.你是如何進行壓力測試的?我想知道對服務器的請求是從IIS託管的遠程客戶端還是從另一個不在IIS託管的應用程序發送的? – 2015-04-10 06:13:53

回答

0

請檢查您的SetMinThreads返回值

如果指定負數或大於活動線程池線程的最大數目的數字(使用GetMaxThreads獲取),則SetMinThreads返回false並且不會更改任一最小值。 (link

+0

是的,我們已經試過了,我們得到的返回值爲true。之後我們還調用了GetMinThreads來確認我們將min線程設置爲我們所期望的。看來remoting實際上並不使用ThreadPool來管理其線程... – meub 2015-04-10 21:44:46

4

綜上所述。遠程服務器由IIS服務由Windows服務和遠程客戶端託管。爲了執行壓力測試,您需要使用Apache Bench來調用遠程處理服務器的遠程客戶端。您注意到儘管您增加了遠程服務器上線程池中的最大線程數,但遠程服務器不會處理超過100個併發請求。

如果我說的都是真的,我認爲有一件事在這裏丟失,即IIS也有可用於處理請求的線程數量的限制。您可以向Apache遠程客戶端發送1000個Apache Bench的請求,但只有100個請求會同時處理。我懷疑這可能是一個原因。

爲了提高IIS的線程數,我建議你嘗試:

  • 檢查組態(見本question)。
  • 嘗試在IIS上使用SetMinThreads

我最後的評論是,你必須記住,線程池中的線程數量太少或線程數量太少都不好。這兩種情況都會傷害到性能

0

你是肯定瓶頸是線程,而不是網絡連接..?默認情況下,.net每個遠程IP的套接字數量相當有限。這適用於遠程處理,HTTP(WCF,Web服務客戶端)等

您可以在應用程序配置/ web.config中system.net/connectionManagement下覆蓋這一點,如果這是你所看到的,如:

<configuration> 
... 
    <system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="1000"/> 
    </connectionManagement> 
    </system.net> 

更多有關配置設置的詳細信息可以在這裏找到:https://msdn.microsoft.com/en-us/library/fb6y0fyc%28v=vs.110%29.aspx