2

我们有一个用 MVC2 + Linq2SQL + MS SQL SERVER 2008 编写的 Web 应用程序,托管在 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 生成数据。

显然某处存在瓶颈并试图找出哪里。

有人对我在哪里寻找问题有任何建议吗?

4

2 回答 2

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 毫秒

B) ~ 39.47 秒

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

我已经在我的博客上描述了它:

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

于 2011-11-10T08:29:10.443 回答
0

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

于 2011-10-04T16:28:33.200 回答