ASP的最大金额/限制. NET站点放在一台服务器上

本文关键字:服务器 一台 站点 金额 NET 限制 ASP | 更新日期: 2023-09-27 18:17:16

我的问题很简单。大约两年前,我们开始迁移到ASP。NET从ASP经典。我们的问题是,我们目前在一个服务器上有大约350个站点,服务器似乎陷入了困境。我们一直在尝试各种事情来提高性能,查询优化禁用ViewState会话状态等,它们都起作用了,但是随着我们添加更多的站点,我们最终使用更多的服务器资源,所以我们在代码中所做的改进实际上被擦除。

基本上我们现在处于一个临界点,我们的cpu目前平均接近100%。我们的信息系统希望我们找到新的方法来改写网站上的代码,以提高性能。

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

任何想法?请只回应,如果你有一个好主意,你正在谈论什么。我听过很多人对车站进行理论分析。我需要一个对即将发生的事情有实际了解的人。

这里是细节。

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

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

  • 3个cpu, 4gb内存。
  • 内存保持在3 - 3.5 GB
  • cpu峰值非常严重,有时它们在短时间内保持接近100%(30 - 180秒)

数据库在单独的服务器上,并且是SQL server 2005。

ASP的最大金额/限制. NET站点放在一台服务器上

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

另外,你的虚拟机的规格也不是很好。它的内存,特别是,可能不是很好,你有很多网站。

你有很多搬家的理由。

然而,有些事情需要注意:

1)这250个站点中有多少是实际使用的?哪些是表现最佳的罪魁祸首?这些人是被转移到自己的盒子里的主要候选者。

2)有多少根本没有被使用?你能退休吗?

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

4)你现在有什么样的冗余?一台机器上有250个站点,而且没有备份?如果你有一个备份服务器,你可以用它来轮询请求,或者作为一个web农场,共享负载。

假设你决定搬家。你应该考虑的第一件事可能是如何。

你打算把网站的数量减半吗?一个盒子上有125 +管理员,另一个盒子上有125 +管理员?还是你打算把最常用的搬出去?

或者你可以有几个虚拟机,所有活动,作为一个web农场或负载均衡系统的一部分。

听起来,购买更多硬件确实存在阻力。

在某些时候,你不得不去想,因为有时候,东西会变旧或被遗忘。在相同的空间里,新的服务器有更多的处理能力和内存,而且运行起来更便宜。

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

我想你已经回答了你自己的问题。你优化了网站,把数据库服务器放在了另一台服务器上。你有600个站点(250 + 250 + 100)

答案对我来说很清楚。买一个内存和CPU更大的盒子。

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

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

您可以向上或向外扩展。

Scale up—升级机器,使其具有更多内存/CPU中的更多核心。向外扩展——通过将站点分散到2台或更多的服务器来分配负载。服务器A上300个,服务器B上300个,或者3台服务器上各200个。

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

仔细考虑一下,似乎您最好衡量访问服务器的用户数量而不是站点数量。你可能有300个站点,但只有一半被使用。我觉得知道用法会更好。

没有简单的公式答案,比如"每gig内存最多可以有47.3个站点"。如果每个站点每天只有一个用户,那么您当然可以使用更多站点来维持性能。有些服务器可能只有两个站点,但性能很差,因为每次访问都需要大量的数据库查询。

在实践中,解决这个问题的唯一方法是经验:当性能开始下降时,您就有问题了。如果在实践中,你的服务器不能支持你的网站和你的用户,那么某人在某处写的具有这样那样资源的服务器应该能够支持更多站点的事实是没有什么价值的。

现实的选项是:

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

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

(c)跨多个服务器分割您的站点,更新DNS或安装前端以将请求映射到正确的服务器。

最大化CPU使用可能是一个好兆头,从某种意义上说,移动到大型服务器或将站点划分到多个服务器之间可能会有所帮助。

你可以做很多事情来帮助提高性能和可伸缩性(事实上,我已经写了一本关于这个主题的书——参见我的简介)。

如果不了解你的应用程序,很难提出有意义的建议,但这里有一些快速的提示可能会帮助你开始:

    多个apppool是昂贵的。每个AppPool有多少个站点?如果可以的话,可以在每个appool中合并多个站点
  1. 最小化客户端往返:改进客户端和代理级缓存,卸载静态文件到CDN,使用图像精灵,合并多个CSS和JS文件
  2. 可以在页面和/或控件上启用输出缓存
  3. 启用静态文件压缩(第一次访问时使用更多CPU,之后使用更少)
  4. 如果可以的话,避免所有会话状态(更倾向于使用cookie进行状态管理)。如果不能,那么至少为不需要写它的页面配置EnableSessionState="ReadOnly"会话状态,或者为根本不需要它的页面配置"false"。SQL Server端有很多东西:缓存,SqlCacheDependency,命令批处理,将多个插入/更新/删除分组到单个事务中,使用存储过程而不是动态SQL,使用异步ADO。. NET而不是LINQ或EF,确保你的DB日志与数据在不同的轴上,等等
  5. 查找代码的算法问题;例如,哈希表通常比线性搜索更好,等等。
  6. 最小化cookie大小,只在页面上设置cookie,而不是静态内容。

此外,使用VM可能会使您的性能损失高达10%——请确保它在可管理性方面确实值得。