我正在使用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
答案 0 :(得分:0)
在Windows / IIS / ASP.NET上,专用于ASP.NET的线程池具有有限的线程,如果对其他主机的请求很慢,您的页面设计可能很容易耗尽它(可能还有套接字用户端口)。幸运的是,您的测试没有显示争用,http://support.microsoft.com/kb/821268
但是如果Mono / ASP.NET使用相同的线程池方式,那么您应该检查错误消息是否是由耗尽的线程池或用户端口引起的。我不熟悉Linux / Mono,但它应该有类似的设置,你可以探索。