【问题标题】:Classic ASP 'Requests Executing' never greater than 1经典 ASP '请求执行' 永远不会大于 1
【发布时间】:2012-06-15 18:03:41
【问题描述】:

我们有一个复杂的应用程序,它使用简短的 ASP servlet 提供 AJAX JSON 流(使用 ADO 来获取数据)。任何给定的会话都可以同时从 10-20 个这些请求中启动。在构建负载时,我们比预期更早地遇到了严重的性能问题。 (服务器是双 XEON、RAID 5、4gb 等)。在 perfmon 中进行调查,我们注意到“请求执行”数字永远停留在 1。永远不会更高。研究表明,20-50 的数字并不少见。 Requests Queued 将徘徊在 10-20 左右,等待时间也会攀升。

我们已将 ASPProcessorThreadMax 从默认的 25 设置为 40,但没有任何效果。它似乎一次只能处理一个请求,不用说,这是行不通的。我找不到任何描述这个特定问题的东西。非常感谢任何帮助。

【问题讨论】:

  • 查看此线程stackoverflow.com/questions/6123453/… 如果您的请求是同步的还是异步的,这会有所不同吗?另外如果用一些固定的数据替换ADO,问题还存在吗?
  • 你在处理会话变量吗?看到这个线程stackoverflow.com/questions/2326817/…
  • 为什么你在 asp-classic 问题中包含 asp.net 标签?到目前为止,这两个 cmets 都指向 ASP.NET 的答案,这些答案可能是线索,但不是确定的。

标签: asp.net multithreading asp-classic perfmon


【解决方案1】:

ASP 会话对象被限制为单线程单元 (STA)。因此,对同一会话的 ASP 脚本的请求只能按顺序处理。

即使跨多个会话,您也可能只看到 1 个执行 ASP 脚本的另一个原因是已为 ASP 启用调试。这会导致 ASP 处理忽略 ASPProcessorThreadMax 并假装它被设置为 1。

要消除问题ensure debugging is not enabled 并关闭“启用会话状态”。如果您在代码中使用 Session 对象,则需要找到替代方法,例如 DB 支持的状态。

但是,您希望在现场制作中有多少活动的并发会话?也许整体用户体验不会真正受到每个会话的请求序列化的影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2023-03-12
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多