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