mqsvc.exe 在将 nservicebus 部署到生产环境时将 cpu 固定在完全使用状态

问题描述 投票:0回答:2

当我将使用 nservice 的站点部署到新的生产环境时,速度慢得无法使用......

经过一些调试,我发现 mqsvc.exe 占用了 50% 的 CPU 使用率,另外 50% 被 w3wp.exe 占用了

我在这里找到了这篇文章: http://geekswithblogs.net/michaelstephenson/archive/2010/05/07/139717.aspx

推荐以下内容:

  • 确保将 NserviceBus Generic Host 的 Windows 服务设置为正确的凭据

  • 确保您为队列设置了正确的权限

  • 确保在 NServiceBus 中打开正确的日志记录配置

所以我认为问题与权限有关,但即使在尝试正确设置权限(我认为)之后,我仍然无法解决问题。

msmq nservicebus
2个回答
3
投票

如果您允许 NServiceBus 创建自己的队列,那么它将使用所需的正确权限来创建它们。

当您设置 Web 应用程序,然后创建队列,然后应用程序运行的身份发生变化时,就会出现问题。那么你就会遇到这个问题。 NServiceBus 尝试检查队列中是否有消息,但它无权执行此操作,因此它会立即一遍又一遍地重试,从而使处理器达到峰值。

修复:删除队列。重新启动网络应用程序。 NServiceBus 接管。

编辑: 正如评论中所述,NServiceBus 3.x 默认情况下不会调用安装程序,这意味着除非您要求,否则不会在生产中自动创建队列。有关更多详细信息,请参阅安装程序上的文档页面。

对于 Web 应用程序(或不使用 NServiceBus.Host 的任何其他情况),您可以调用安装程序作为流畅配置的一部分。 NServiceBus 下载中有一个完整的示例,但这里有一个 GitHub 上相关文件的链接


3
投票

问题最终确实是网站需要被授予对队列的显式权限。

我在网上找到了许多资源告诉我这一点,但我仍然需要花费大量时间来弄清楚到底哪个帐户需要访问权限......事实证明,由于我的应用程序池设置为作为 ApplicationPoolIdentity 运行,我需要通过将以下帐户添加到 NServiceBus 队列来授予帐户权限:

IIS AppPool\{APP POOL NAME}

我授予了完全访问权限,但我相信如果您需要的话,您可以对其进行一些改进。

© www.soinside.com 2019 - 2024. All rights reserved.