我有一个运行于互联网信息服务7.5和.NET4在某些特定时间,我会收到很多来自客户的请求(大约两分钟内 10000) 大约需要 20 分钟才能全部完成。我很困惑,为什么这段时间内 CPU 使用率没有超过 20%。我考虑过以下几个原因。
- 数据库使用情况:我的数据库很小(大约 40MB),并且服务器的内存使用率低于 60%,因此数据库缓存命中率为 100%。
- 外部服务调用:我的服务中没有这样的事情。
- 锁的使用:我的服务中没有使用 DB 锁或任何信号量。
- 并发执行请求数低:性能监视器显示所有传入的请求都进入执行状态,并且此时等待队列为空。
此类系统 CPU 利用率低的其他潜在原因有哪些?
答案1
最后我找到了这个问题的解决方案。我将服务器配置为 Web 园(将工作进程数增加到 5),CPU 使用率增加到 47%。我仍然不确定原因,但我强烈猜测,大量对 DB 的请求正在满足某些资源,而这些资源仅限于一个进程,增加工作进程数可以解决这个问题。
更新
我终于找到原因了!在我的服务的 ServiceBehavior 配置中,我使用了 InstanceContextMode.Single,而 ConcurrencyMode 的默认值也是 Single。我将后者更改为 multiple,现在一切正常。