我们在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中生成数据。
显然,某个地方存在瓶颈并试图弄清楚在哪里。任何人都有任何建议让我在哪里寻找问题?
答案 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导致问题,因为一旦指定它一切都很好。
我在我的博客上描述过:
我已经在codeplex上的asp.net的问题跟踪器中发布了它,但是没有人评论/回复它。
答案 1 :(得分:0)
对于一些较小的性能优势,您可以尝试Rico Mariani在http://blogs.msdn.com/b/ricom/archive/2007/06/22/dlinq-linq-to-sql-performance-part-1.aspx提到的一些调整。特别是尝试使用CompiledQuery并关闭仅显示对象的更改跟踪。