我们注意到在将NServicebus添加到我们的ASP.net MVC应用程序后,CPU使用率从5%上升到50%。这是在没有任何负载的服务器上。我们注意到托管WCF应用程序的另一台服务器上的行为相同。在尝试了不同的事情之后,我们发现如果我们将总线配置为仅发送,则CPU使用率降至5%。当总线没有配置为仅发送时,有人知道为什么cpu使用率如此之高?
答案 0 :(得分:3)
我以前经历过这个。
我发生的事情是我设置了一个应用程序池,它最初是作为网络服务运行的。在我有机会将应用程序池标识设置为域级用户(用于访问文件共享等)之前,页面已被命中,因此NServiceBus安装程序已经创建了具有网络服务凭据的队列。
当我设置应用程序池用户时,突然间它没有对队列的适当权限。
正常情况下,如果没有可用的消息,NServiceBus会检查超时的消息,但在这种情况下,它会进入一个非常紧密的循环“是否有消息?我没有权限。是否有消息?我不知道没有许可。“所以你得到了非常高的CPU。
我通过删除队列并允许NServiceBus使用适当的权限重新创建它来解决问题。
答案 1 :(得分:1)
高CPU的原因可能是在队列中查找消息的NServiceBus代码,尽管我发现有点难以置信。仅发送模式阻止NServiceBus查找队列中的消息。