在运行 ASP.net 应用程序的 IIS 中,为什么 CPU 使用率会缓慢增加、急剧下降,然后上升到受限制的水平?

在运行 ASP.net 应用程序的 IIS 中,为什么 CPU 使用率会缓慢增加、急剧下降,然后上升到受限制的水平?

参见此处的图片:总 CPU 使用率 %

通过对应用程序运行自动负载测试,可以轻松重复此趋势。当 CPU 使用率稳定在明显受限制的水平(~30%)后,应用程序响应时间会非常慢。

答案1

尝试监控其他性能计数器。我的第一个猜测是检查 GC 中的 % 时间。

答案2

感谢您的回答。我确保将 Debug 设置为“False”。我查看了内存和 GC 计数器中的时间百分比。在 CPU 急剧下降之后,内存使用率会上升几分钟,然后又会下降(这是垃圾回收)。总体而言,GC 中的时间百分比并不高。

我在系统事件日志中找到了其他信息。CPU 急剧下降对应于IIS 1011 事件

为应用程序池 %1 提供服务的进程与 WWW 服务发生致命通信错误。进程 ID 为 %2。数据字段包含错误编号。

答案3

考虑到这一点,我想到两个罪魁祸首:

  • 对象最终进入大型对象堆。这将导致 Web 应用程序出现性能问题,但不会在 GC 时间计数器中​​显示。但是,我倾向于不这样做,因为它往往与高内存使用率和内存不足异常/错误有关,而不是 CPU 使用率。
  • 有些东西没有正确处理,可能是因为它是每个请求中引用的全局对象。我认为这与字符串连接有关,因为这是与高 CPU 使用率最相关的操作。把这些线索放在一起,我的直觉告诉我要寻找与应用程序一起使用的日志系统。这是一个每次请求都会被触发并处理大量字符串的对象。

不管是什么,我认为你需要做的是将应用程序发回给程序员。你不可能通过设置服务器配置选项来神奇地解决问题。

相关内容