一台服务器上ASP.NET站点的最大数量/ LIMIT

时间:2011-12-09 20:50:01

标签: c# asp.net performance sql-server-2005 windows-server-2003

我的问题很简单。大约2年前,我们开始从ASP Classic迁移到ASP.NET。 我们的问题是我们目前在服务器上有大约350个站点,服务器似乎陷入困境。我们一直在尝试各种方法来提高效果,查询优化禁用ViewState 会话状态等等,但它们都有效,但正如我们一样添加更多网站,我们最终使用更多的服务器资源,因此我们在代码中所做的改进几乎被删除。

基本上我们现在处于临界点,我们的CPU目前平均接近100%。我们的IS希望我们找到新的方法来重新设置网站上的代码以提高性能。

我有一个理论,我们只是限制一个服务器可以处理的网站数量。

有什么想法吗?如果您对所谈论的内容有充分的了解,请回复。我听说很多人对这个电台进行理论化。我需要一个对可能发生的事情有实际了解的人。

以下是详细信息。

  • 250个ASP.NET网站
  • 250个管理站点(用ASP.NET编写,基本上是后端管理站点)
  • 100个经典ASP网站

在虚拟化的Windows Server 2003上运行。

  • 3个CPU,4 GB内存。
  • 内存大约为3 - 3.5 GB
  • CPU飙升非常严重,有时它们会在短时间内(30 - 180秒)保持接近100%

数据库位于单独的服务器上,是SQL SERVER 2005.

6 个答案:

答案 0 :(得分:7)

看起来你已达到这一点。你已经优化了你的应用程序,你已经看过服务器性能,你可以看到你达到峰值内存使用量,最大化CPU,并且,让我们面对它,管理这么多的网站并不容易。

此外,您的VM的规格并不是很棒。特别是对于你拥有的网站数量来说,这可能并不是很好。

你有充足的理由搬家。

但是,有些事情要看:

1)这250个网站中有多少实际使用?哪些是性能最高的违规者?那些是被移到他们自己的盒子上的主要候选人。

2)有多少人根本没用过?你可以退休吗?

3)您正在虚拟机上运行。您使用什么样的虚拟机平台?该硬件上还运行着哪些其他服务器?

4)您目前拥有什么样的冗余?一个盒子上有250个站点没有备份?如果您有备份服务器,则可以将其用于循环请求,或者作为Web场共享负载。

让我们说你决定搬家。你应该考虑的第一件事就是如何。

你打算简单地减少一半的网站数量吗?一个盒子上有125 +管理员,另一个盒子上有125 +管理员?或者你打算移动最常用的?

或者,您可以将多个虚拟机作为Web场或负载平衡系统的一部分进行活动。

然而,通过事物的声音,购买更多硬件是一种真正的阻力。

在某些时候,你必须要有时候,事情会变老或者落后。新服务器在相同的空间中具有更多的处理能力和内存,并且可以更便宜地运行。

哦,还有一件事。所有这些重复优化和测试的成本可能很容易通过购买更多硬件来抵消。当然,这并不是没有做任何优化的借口,我对你运行的网站数量印象深刻,特别是如果你有很多用户,但是有一个平衡,我希望你能倾向于更多的“更多硬件”方面。

答案 1 :(得分:3)

我认为你真的回答了自己的问题。您已经优化了站点,您已在不同的服务器上安装了数据库服务器。你有600个站点(250 + 250 + 100)。

答案很清楚。购买具有更多内存和CPU能力的盒子。

答案 2 :(得分:3)

您的服务器可以处理的站点数量没有实际限制,如果所有600个站点都没有用户,则服务器上的负载不会很大。

我想你可能会在serverfault找到一个更好的答案,但这是我的2美分。

您可以向上扩展或向外扩展。

向上扩展 - 在CPU中使用更多内存/更多内核升级计算机。 向外扩展 - 通过在2个或更多服务器上拆分站点来分配负载。服务器A上300,服务器B上300,或3个服务器各200。

正如@uadrive所提到的,这是一个负载问题,而不是网站数量。

答案 3 :(得分:2)

考虑到这一点,看起来你最好不要测量用户点击服务器而不是网站数量。您可以拥有300个站点,只使用一半。在我看来,了解用法会更好。

答案 4 :(得分:2)

没有简单的公式答案,例如“每台RAM可以拥有最多47.3个站点”。如果每个站点每天只有一个用户,您肯定可以在更多站点上保持性能。有可能服务器只有两个站点,但性能很糟糕,因为每次点击都需要大量的数据库查询。

实际上,解决这个问题的唯一方法是凭经验:当性能开始下降时,就会遇到问题。事实上,如果在某些情况下,如果您的服务器无法支持您的网站和您的用户,那么有人在某本书中写过具有此类资源的服务器应该能够支持更多网站的事实没什么价值。

现实选择是:

(a)优化您的代码和数据库查询。你说你已经做到了。也许你可以做得更多。您的代码现在不太可能是最好的代码,但很可能找到进一步改进的代价将非常昂贵。

(b)购买更大的服务器。

(c)在多台服务器之间中断您的网站,并更新DNS或安装前端以将请求映射到正确的服务器。

答案 5 :(得分:0)

最大限度地利用CPU可能是个好兆头,因为移动到大型服务器或在多个服务器之间划分网站可能会有所帮助。

您可以做很多事情来帮助提高性能和可扩展性(事实上,我已经写了一本关于这个主题的书 - 请参阅我的个人资料)。

如果不了解有关您的应用的更多信息,很难提出有意义的建议,但这里有一些可能有助于您入门的快速提示:

  1. 多个AppPools很贵。每个AppPool有多少个网站?如果可以的话,每个AppPool组合多个站点
  2. 最大限度地减少客户端往返:改进客户端和代理级缓存,将静态文件卸载到CDN,使用图像精灵,合并多个CSS和JS文件
  3. 可以在页面和/或控件上启用输出缓存
  4. 为静态文件启用压缩(首次访问时使用的CPU更多,但之后更少)
  5. 如果可以,请尽量避免会话状态(更喜欢使用Cookie进行状态管理)。如果你不能,那么至少为不需要编写它的页面配置EnableSessionState =“ReadOnly”会话状态,或者对于完全不需要它的页面配置“false”
  6. SQL Server端的许多内容:缓存,SqlCacheDependency,命令批处理,将多个插入/更新/删除分组到单个事务中,使用存储过程而不是动态SQL,使用异步ADO.NET而不是LINQ或EF,make确保您的数据库日志与数据等在不同的主轴上
  7. 查找代码的算法问题;例如,哈希表通常比线性搜索等更好
  8. 最小化Cookie大小,仅在页面上设置Cookie,而不是在静态内容上设置。
  9. 此外,使用虚拟机可能会使您的性能降低约10% - 确保在提高可管理性方面为您所购买的产品确实值得。