Web场中的ASP.NET MVC2 - 具有高流量的慢页面加载

时间:2011-10-04 07:05:45

标签: linq-to-sql asp.net-mvc-2 iis-7.5 web-farm nlb

我们在Web场上托管了一个用MVC2 + Linq2SQL + MS SQL SERVER 2008编写的Web应用程序。几乎像stackoverflow.com

我们有4 x IIS7 + 1 SQL SERVER 2008负载均衡与MS NLB

静态内容由外部缓存提供商Akamai缓存,可减少86%的请求。

每个Web服务器都有32 GB的RAM和4个四核CPU,因此前端有64个核心。

我们在表格中保存会话状态。

它完全适用于中等流量(页面加载= 0.2秒),但公司会制作电视广告,在这些广告中,流量可在20-30秒内达到20,000个用户。

此时页面速度减慢到8-10秒。但是,CPU和内存的使用在任何机器上都没有达到40%。

数据中心的带宽没有达到其极限的一半。

慢速页面仅从1-2个表中的最多10条记录的简单SELECT中生成数据。

显然,某个地方存在瓶颈并试图弄清楚在哪里。

任何人都有任何建议让我在哪里寻找问题?

2 个答案:

答案 0 :(得分:1)

我前段时间发现了这个问题,但没有时间在这里发布。我已经尝试了几乎所有我能想到的事情:索引,优化sql,监视磁盘i / o,修改代码。以上都没有解决我的问题。我在我们的局域网上从2个工作站运行网络压力测试,我可以在几秒钟内冻结整个页面!在运行测试时我发现了一些奇怪的东西。我创建了一个单独的控制器用于测试,我放了2个方法。两者都做同样的事情:要求我们的数据库服务器使用相同的数据。

行动A)

public ActionResult Index(){
var model = new SomeModel();
// Get data
....
return View(model);
}

行动B)

public ActionResult Index() {
 var model = new SomeModel();
// Get data
....
return View("Index",model);
}

页面加载的差异:

A)~297 ms

B)~39.47 s

这仅在高并发期间发生,否则很好。 似乎在MVC2库中搜索默认View导致问题,因为一旦指定它一切都很好。

我在我的博客上描述过:

http://arturito.net/2011/10/24/asp-net-mvc2-in-the-web-farm-slow-page-load-with-high-traffic-where-is-the-bottleneck/

我已经在codeplex上的asp.net的问题跟踪器中发布了它,但是没有人评论/回复它。

http://aspnet.codeplex.com/workitem/9396

答案 1 :(得分:0)

对于一些较小的性能优势,您可以尝试Rico Mariani在http://blogs.msdn.com/b/ricom/archive/2007/06/22/dlinq-linq-to-sql-performance-part-1.aspx提到的一些调整。特别是尝试使用CompiledQuery并关闭仅显示对象的更改跟踪。