【问题标题】:Is ASP.net WebForms a CPU intensive platform?ASP.net WebForms 是 CPU 密集型平台吗?
【发布时间】:2023-03-30 16:52:02
【问题描述】:

我在asp.net 商店工作,今天听说我们服务器的瓶颈是CPU。我一直认为 webapps 在 CPU 之前往往是 I/O 和网络绑定的。这是 ASP.net/IIS 的事情吗?是我们的代码吗?还是我对整件事完全错了?

此外,我们还使用网络表单创建面向公众的社交/商务网站。并不是 CPU 负载有问题或其他什么,我们的服务器目前可以处理负载。我只是觉得这很令人惊讶,因为根据我对 Web 应用程序的了解,大多数情况下 CPU 在扩展方面并不是问题,尤其是在具有快速运行时的编译语言(如 .NET)上。

【问题讨论】:

  • 我们需要更多信息。你们提供什么类型的网络应用程序?它们是您的标准业务线 CRUD 应用程序吗?如果是这样,您存储数据的存储模型是什么?如果他们是业务线,是否正在进行大量的计算和计算?
  • 我假设“这是我们的代码吗?”您的服务器现在看起来很慢的部分?
  • 添加了更多说明。

标签: asp.net performance web-applications


【解决方案1】:

这是你的代码。 ASP.NET 本身并没有占用大量 CPU,我实际上会质疑关于 CPU 是瓶颈的研究,因为除非你正在将您的 Web 应用程序上的 Pi 计算到小数点后十亿位,我认为没有理由会占用所有 CPU 时间。

【讨论】:

  • 我还会问他是否在他进行托管的同一台服务器上运行他的数据库后端(如 SQL Server)。他是否在运行其他服务?你有足够的内存吗? RAM RAM RAM,越多越好! :)
  • 这也是我的想法。 SQL 服务器在另一台机器上。 Ram 使用率排在 CPU 之后(如果有的话,我们可能已经过度使用缓存了)
  • 这是共享主机环境还是您与其他应用共享服务器的 VPS?如果是这样,您可能只是在负载很重的服务器上,应该要求移动。
  • 它的专用服务器在怪异的机架空间上。
  • @Nick:使用的方法是使用 VS 负载测试工具并查看机器性能。这也是我们在高峰期观察到的。我们并不是在进行固有的 CPU 密集型活动(电子商务/论坛/数据库驱动的内容),但是当我们需要添加服务器时,驱动的是 CPU,而不是 RAM、IO 或网络(据我所知)往往先于 cpu关于扩展大多数网络应用程序。
【解决方案2】:

这很可能是您的代码。你不能在这里明确地陈述任何关于 ASP.Net 的内容,它就像任何其他计算机程序一样 - 它完全取决于你的应用程序实际在做什么。

提供网页本身并没有占用大量 CPU。我见过一台运行 IIS 的笔记本电脑,每秒处理 1200 个页面请求。虽然 ASP.Net 的配置更多是为了“易用性”而不是优化性能,但调整它以获得出色的性能并不难。

您可以使用诸如DottraceRedGate Ants 之类的分析器来查看您的代码在哪里减慢了一切。

【讨论】:

  • 那台 IIS 笔记本电脑是否提供 Web 表单页面?我怀疑高 cpu 使用率来自 webforms“页面生命周期”的处理方式,构建和拆除控件,然后在每个请求上将它们呈现为 html。
  • 是的。您是否曾经对 Web 表单页面进行过基准测试?速度非常快。
【解决方案3】:

我会查看代码以查看是否存在性能问题。该站点每天提供近 100 万个页面,并且看起来运行良好。 Asp.net 在编写时针对可伸缩性进行了相当优化。

【讨论】:

    【解决方案4】:

    虽然乍一看,我会说“当然是 I/O 密集型”,但实际上这取决于您的应用程序所服务的内容。

    在一种极端情况下,多媒体服务器当然会受到 I/O 限制。

    另一方面,提供相当纯文本 HTML 页面的计算密集型站点将受到 CPU 限制。

    根据我的经验,我发现大多数网站都受 I/O 限制。也就是说,当购买额外的服务器时,是为了增加 I/O 而不是 CPU 吞吐量。我什至可以说,即使是我工作过的最复杂的站点,它有大约 30 个服务器,也可以由单个处理器提供良好的服务。引导我们购买的是网络带宽。

    【讨论】:

    • 我们没有进行编码或类似的事情,它是静态资源和 HTML 生成的混合体。我有同样的经验,CPU 不是大多数 web 应用程序的问题,这就是我问这个问题的原因。
    【解决方案5】:

    如果您的硬件速度较慢,可以。对于大多数现代服务器,没有。在大多数情况下,数据库会对您的 CPU 造成更多负担。

    【讨论】:

      【解决方案6】:

      如果您谈论 CPU 密集型,它是相对而言的,但是 .NET 不是,但 ASP.NET 非常多。 Web 应用程序对每个请求执行数千次回发并重新创建/销毁控件非常昂贵。

      这样想,在纯 ASP.NET(非 ajax 的,旧的)中计算可见性/颜色.. 仅在服务器上为 1000 名用户计算 html 页面每个元素的所有属性并将它们分发给客户端。不仅写得不好的 ASP.NET 服务器控件会因为计算过多而占用更多的 CPU。

      为了提高 ASP.NET 性能,应该使用更多的 AJAX 或像 Flex/Silverlight 这样的 RIA 将大大减少 CPU 开销,因为您可以使用客户端的 CPU 来进行数据可视化。

      RIA 客户端(Flex/Silverlight)+ ASP.NET Web 服务是未来,我没有详细的统计数据可以分享,但我们在将近一年前离开了 ASP.NET,我们的 CPU 使用率平均已降至 18%在基于 RIA 的网站之前的 99%。

      【讨论】:

        【解决方案7】:

        运行分析器以查看您的应用程序中是否存在使用过多 cpu 或大量内存的区域。使用服务器上的任务管理器,查看是否是 IIS(inetinfo 和 w3wp)正在运行,而不是其他进程。如果是 IIS,请确定是否是您的应用程序池正在运行。使用 iisapp 命令查找哪个应用程序池分配给了哪个工作进程。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-25
          • 1970-01-01
          • 2011-03-30
          相关资源
          最近更新 更多