【问题标题】:What's a typical average number of ASP.NET sessions per CPU or per memory?每个 CPU 或每个内存的 ASP.NET 会话的典型平均数量是多少?
【发布时间】:2009-12-18 19:39:17
【问题描述】:

(编辑:重写问题以使其更清晰,意思没有改变)

您可以创建应用程序并衡量其使用情况。但是我想知道的是,如果您预先决定使用 ASP.NET 应用程序,一台机器通常可以容纳多少同时用户(会话)。

让我们假设以下默认简化设置:Inproc 会话、ASP.NET 3.5、NHibernate + L2 缓存、购物网站(会话中的购物篮属性)。

虽然我可以确定会话不会超过 20kB,但我的经验告诉我,即使应用程序布局合理,通常也会产生巨大的开销。我正在寻找可以在便签上进行的简单计算。

对于赏金:对于每个 X 并发用户,您会建议您的管理使用什么 CPU/内存,而忽略带宽要求。 IE。答案可能是:在具有 1GB 内存的 2GHz Xeon、Win2k8 上,您可以安全地同时处理 500 个会话,但除此之外,它需要仔细规划或更多硬件重新

【问题讨论】:

  • 这是我最不喜欢被管理层问到的问题。这很难回答,甚至是不可知的,因为这在很大程度上取决于应用程序的典型用法,而这有时是事先不知道的。令人困惑的是,管理层经常以“同时会话”而不是“每个时间单位的请求”来衡量数量,这是一个更容易理解的衡量标准。我希望有人有一些好的经验法则。

标签: asp.net performance session


【解决方案1】:

既然您正在寻找一个实际的#,我会为您提供一些。我们正在使用 ASP.NET MVC 创建一个安全的 HR 应用程序。像您一样,我们希望对最大并发连接有一个很好的感觉,我们将其定义为 10 秒内服务的最大页面数(假设用户不会等待超过 10 秒的页面)。

由于我们正在寻找一个上限,因此我们使用了一个非常简单的页面。 SSL + 一些会话变量。在 Dual Xeon 四核(共 8 核)上,以 16GB 内存和 SQL Express 作为后端,我们能够达到约 1,000 个“并发”连接。内存或 SQL 表达都不是限制因素,我们的测试主要是处理器和 I/O。请注意,我们没有使用缓存,尽管对于购物车我怀疑你也不会。此页面访问数据库约 3 次,并发送约 150KB 的数据(主要是 png 图像,未缓存)。我们验证了创建了 1,000 个会话,尽管每个会话都很小。

我们的 POV 是 1,000 可能是不现实的。包括具有业务逻辑和真实用户数据的页面的测试显示最多约 200 个并发用户。但是,一些用户也会运行报告,这可能会占用整个核心长达 30 秒。在这种情况下,9 个并发报表用户基本上可以使系统不适合其他人。这是另一位发帖人的观点……您可以随心所欲地获取其他性能#s,但是您的系统可能会根据其正在执行的操作而表现完全不同。

【讨论】:

  • 感谢您的详细解答。这确实非常有用,并且确实使我更接近“经验法则”数字,尽管有人可能会争辩说它仅针对您的情况非常具体(但这将永远是这样,我们只是适应)。我在决定是给你赏金还是给你 Ameer Deen 时遇到了一些麻烦。虽然我认为两者都非常有用,但你最接近实际问题的答案,因此,我选择你的。
【解决方案2】:

你知道代码的“质量”吗?

糟糕的代码可能会在硬件上花费巨大,而优秀的代码不会花费任何成本

根据评论更新

几年前,我不得不维护一个糟糕的应用程序,它使用 500 megs ram(有时是 1.5gig)并且需要几分钟来显示内容,我不得不重写整个内容,之后,它只是占用必要的内存量(减少近 10 到 15 倍),而且显示内容很快,我在这里说的是毫秒。

内存中错误执行的循环和严重缓存数据的数量......令人难以置信的悲伤。只是告诉你,我在内存中有 3 个版本的整个该死的数据库(所以 4 个带有真正的数据库),并且代码必须一个接一个地更新所有版本。应用程序中的其他所有内容均基于内存中的版本。

无论如何,最后。我删除了 25000 行代码。

代码的质量很重要。

第二次更新

found this, might be good

第三次更新

在我目前正在开发的一个应用程序中,asp.net 3.5 使用 linq to sql 与 sql server 2005 交谈(当然)。很多读取到 db 而不是很多写入。

在我自己的开发机器上,它是带有 3 gig ram 的旧 p4 prescott。加载整个页面平均需要 20 毫秒到 100 毫秒,具体取决于哪个页面 :-)

会话(内存使用)非常低,肯定低于 20k

如果我从这里出发,我的数学不好会是;

如果我有 100 个并发用户,加载一个页面大约需要 2 秒,并且在会话期间至少会使用 2 兆内存。

需要糟糕的数学? 1 个用户需要什么,然后将 1 个用户乘以 WhatYouThinkYouShouldBeAbleToHandle

我认为没有其他方法可以找出答案。因为同样,页面下的代码确实很重要。

【讨论】:

  • 好点。但仅仅代码质量并不是衡量 CPU 或内存使用的真正衡量标准(如果可以衡量的话)。
  • 感谢您的编辑,为此 +1。我从来没有说过质量很重要。这非常重要。但是,糟糕的代码通常无法很好地衡量。好的代码可能包含坏的错误(最近的一个小线程问题导致不可预测的巨大内存增加的愚蠢示例:非常好的代码,只有一个错误,巨大的后果,但我正在漂移......)。真的,我只是在这里遵循一些经验法则。 2Ghz/1GB 机器上的 25K 会话?我从来没有见过(好的程序中 1.5K 可以,差的程序中 0.5K),但是一般阈值在哪里?
  • Tx Fredou,但请检查我的 q 中的第一句话。 15 年来,测量一直是我工作的一部分。衡量更多的是“事后”解决性能问题。但是在你开始建造之前你会讲什么故事呢?一般的“经验法则”是什么?
  • @Abel,您对应用程序本身了解多少。它有什么作用?如果那个未知,我想你需要在发现后进行调整。在使用框架 3.5 时与 sql server 2005 通信的简单 asp.net 应用程序不需要太多。你可以在 bestbuy 买一台台式电脑,它会很好用。您是否期望大量写入(对数据库)或视图?
  • 我加了一个赏金。我真的在这里寻找一个经验法则,你可以在过早的谈判或会议中使用它。在您真正知道(确切地)要构建什么以及如何构建之前。
【解决方案3】:

您显然明白这取决于应用程序,而了解应用程序可以做什么或支持什么的最佳方式是衡量它。过去,我使用 Microsoft 的交易成本分析方法得到了一些相当不错的估计。我以前在 Site Server Commerce Edition 3.0 中使用过它,现在在现代 ASP.net 应用程序中使用过它,而且效果很好。

link 是 Microsoft 的“提高 .Net 应用程序性能和可扩展性”一书中的 sn-p,它详细介绍了可用于性能数据(CPU 使用率、IIS 计数器等)的公式计算您可以在您的网站上支持的用户数量。我无法发布该书的第二个链接,但如果您在 Google/Bing 上搜索 scalenet.pdf,您会找到它。希望这会有所帮助

【讨论】:

  • 这是一个非常有趣的链接。我对测量了如指掌,但这提供了一些最终可能有用的 PoC 方法。不是经验法则,而是迄今为止最有用的答案。
【解决方案4】:

这很大程度上取决于您在服务器上所做的工作量。有些应用程序可能会执行 100 次,而其他应用程序只能执行 10 次。

【讨论】:

  • 我同意,但是 10 或 100 听起来并不合理,考虑到数千甚至数万,或者是吗?
猜你喜欢
  • 2021-11-22
  • 2017-08-04
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2021-11-22
  • 2019-01-15
相关资源
最近更新 更多