【问题标题】:Max Amount / LIMIT of ASP.NET sites on one server一台服务器上 ASP.NET 站点的最大数量/限制
【发布时间】:2011-12-09 20:50:00
【问题描述】:

我的问题很简单。大约 2 年前,我们开始从 ASP Classic 迁移到 ASP.NET。 我们的问题是我们目前在服务器上有大约 350 个站点,并且服务器似乎陷入了困境。我们一直在尝试各种方法来提高性能,Query OptimizationsDisabling ViewStateSession State 等,它们都奏效了,但随着我们添加更多站点,我们最终会使用更多服务器资源,因此我们在代码中所做的改进几乎被抹杀了。

基本上我们现在处于一个临界点,我们的 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。

【问题讨论】:

  • 取决于服务器和代码,您可以在一台服务器上放置比您描述的更多的站点但是因为我们对源代码一无所知(是 .NET 2 还是 4?它到底是做什么的?)和“虚拟机内的 CPU 峰值”并不是一个真正的诊断问题,答案只是纯粹的猜测......
  • 天哪,你试图在玩具服务器上运行这么多网站?这不是关于 asp.net 的可扩展性,而是关于“我能得到多便宜”。这是一个提示 - 至少获得一个像样的工作站 - 16gb 内存。然后为体面的 IO 获取足够的磁盘。然后回来问。
  • “请仅在您对您所谈论的内容有很好的了解时才回复。我听过很多人对电台进行理论化。我需要一个对什么有实际了解的人可能会继续。” 你在开玩笑吧?你没有给我们任何信息来继续做出这样的回答。我们必须是才能知道这一点。也就是说……你可能是对的。或者,你可能错了。
  • 另一件事;我在下面提到。在支付人员将软件优化到 n 级的成本与购买更多硬件的成本之间存在平衡。您还应该考虑与尝试获得更多性能相关的成本。这是一个不断减少的回报。
  • 您使用了多少个应用程序池?这个数字可以减少吗?

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


【解决方案1】:

看来您已经达到了这一点。您已经优化了您的应用程序,您已经查看了服务器性能,您可以看到您正在达到峰值内存使用率,最大化 CPU,并且,让我们面对现实吧,管理这么多网站绝非易事。

另外,您的虚拟机规格也不是很好。特别是它的内存,对于您拥有的网站数量来说可能不是很好。

你有很多理由搬家。

不过,有几点需要注意:

1) 这 250 个网站中实际使用了多少?哪些是最佳绩效违规者?这些人是被转移到自己的盒子上的主要候选人。

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

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

4) 您目前有什么样的冗余?一个盒子上有 250 个站点,没有备份?如果你有一个备份服务器,你可以用它来循环请求,或者作为一个网络农场来分担负载。

假设您决定搬家。您首先应该考虑的是如何做。

您是否打算简单地将网站数量减半? 125 + 管理员在一个盒子上,125 + 管理员在另一个盒子上?还是要搬最常用的?

或者,您可以拥有多个处于活动状态的虚拟机,作为网络场或负载平衡系统的一部分。

不过,从表面上看,购买更多硬件确实存在阻力。

在某些时候,您将不得不这样做,因为有时,事情会变得陈旧或被抛在后面。新服务器在相同空间内拥有更多的处理能力和内存,而且运行成本更低。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 他不需要其他服务器。他需要一些你可以在商店买到的东西。哎呀,他的“服务器”甚至不是一个像样的虚拟机。我为我的开发环境运行了一个虚拟机,它比这个玩具虚拟机设置更强大。
    • 但它可以运行孤岛危机吗? ;-) 我认为规范对所有内容都很轻,尤其是 RAM,但使用低功率机器农场可能是一个不错的折衷方案。
    • 我的家用桌面甚至比那个更好......而且我工作的服务器到目前为止
    【解决方案3】:

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

    我认为您可能会在 serverfault 中找到更好的答案,但这是我的 2 美分。

    您可以扩大或扩大规模。

    向上扩展 - 升级机器,使其具有更多内存/更多 CPU 内核。 横向扩展——通过将站点拆分到 2 个或更多服务器来分配负载。服务器 A 上 300 个,服务器 B 上 300 个,或者跨 3 个服务器每个 200 个。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        在实践中,解决此问题的唯一方法是凭经验:当性能开始下降时,您就会遇到问题。如果在实践中您的服务器无法支持您的站点和您的用户,那么有人在某处的书中写道,具有某种资源的服务器应该能够支持更多站点,这一事实毫无价值。

        现实的选择是:

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

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

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

        【讨论】:

          【解决方案6】:

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

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

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

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

          此外,使用 VM 可能会使您的性能损失高达 10% 左右 - 请确保它确实物有所值,因为它为您带来了改进的可管理性。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-12-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多