单声道:套接字选择超时

时间:2011-12-21 07:58:00

标签: asp.net mono

我正在使用Siege在fastcgi-mono-server4(ubuntu服务器11.04)和本机.net框架(windows server 2008)上测试asp.net。

我的.aspx页面发出这样的请求(我得到JSON):

protected void Page_Load( object sender, EventArgs args )
{
    var url = "http://some_host/location";

    var request = WebRequest.Create( url ) as HttpWebRequest;

    using ( var response = request.GetResponse() as HttpWebResponse )
        using ( var reader = new StreamReader( response.GetResponseStream() ))
            Content.InnerText = reader.ReadToEnd();
   Console.WriteLine ("Mono");
}

当我向Windows服务器上的.aspx页面发出请求时,一切正常:

siege -d0.1 -c200 -r10 windowsserver/TestPage.aspx
Transactions:                    2000 hits
Availability:                 100.00 %
Elapsed time:                   1.10 secs
Response time:                  0.07 secs
Transaction rate:            1815.60 trans/sec

当我向Ubuntu Server上的.aspx页面发出请求时,有一些奇怪的事情:

siege -d0.1 -c200 -r10 ubuntuserver/TestPage.aspx
Transactions:                    1472 hits
Availability:                  73.60 %
Elapsed time:                  91.22 secs
Response time:                  1.10 secs
Transaction rate:              16.14 trans/sec

我有很多这样的消息:

[alert] socket: 675498112 select timed out: Operation timed out

Ubuntu上的硬件比Windows上的硬件更强大(Windows在虚拟机上)。

如果我向.aspx页面发出请求而没有请求到另一台主机(页面在Ubuntu上) - 一切都很好。 Mono在这种情况下很快。

那么可能是什么问题? Ubuntu或fastcgi-mono-server4

1 个答案:

答案 0 :(得分:0)

在Windows / IIS / ASP.NET上,专用于ASP.NET的线程池具有有限的线程,如果对其他主机的请求很慢,您的页面设计可能很容易耗尽它(可能还有套接字用户端口)。幸运的是,您的测试没有显示争用,http://support.microsoft.com/kb/821268

但是如果Mono / ASP.NET使用相同的线程池方式,那么您应该检查错误消息是否是由耗尽的线程池或用户端口引起的。我不熟悉Linux / Mono,但它应该有类似的设置,你可以探索。