在我驻扎的新公司,我注意到当我们重新启动服务器时,启动 MSMQ 服务需要一点时间。它会自动启动,并在很长一段时间内处于启动状态-我们接触的是小时,而不是分钟(此时我已经过去了 67 分钟,但还没有完成)!
我对 MSMQ 的体验就像企鹅的飞行体验——见过它,我自己从未做过,所以我无法真正判断如此大量时间消耗的合理性。但是,感觉不对劲,我觉得这背后有些可疑之处。
我得到的解释是“一直都是这样”。因此,我们仍然应该使用火而不是电来获得光...我并不是说这里的人错了。我只是想进一步调查它是“新鲜血液”。我可以补充一下,非常不耐烦的血液。
我的 google-fu 产生的东西并没有让我更明智(主要是如果它根本不工作或在手术阶段工作不令人满意怎么办)。事件日志什么也没说,之后手动启动其他服务(默认服务除外)。启动时的缓慢似乎是一致的,但并非如此。队列被清空,否则服务器的行为或多或少像一个正常人。我们有大量的硬盘空间。
所以,问题是双重的。
- 如此长的 MSMQ 观察期是否可以接受和预期?
- 如果我对这种行为感到不安,我应该仔细调查什么?
系统如下。
- Windows Server 2008 R2 标准版 SP1
- 64 位、8 GB、至强 2.4GHz(2 个内核)
你一定有很多消息。MSMQ 需要很长时间才能将所有消息映射到内存中。您可能已经检查过您使用的队列是空的,但这些不是问题所在的队列。通常是日志和系统队列。快速检查 system32\MSMQ\storage 文件夹——它将包含很多 4MB 的文件。可能会有1000个。如果是这样,请检查它们以什么字母开头。J 代表日志,P 代表持久性。然后使用性能监视器查看所有 MSMQ 对象,而不仅仅是您用于应用程序的队列。如果您有 J*.MQ 文件,也请查看日志队列。您最终会发现队列囤积了消息。我想不出您启动缓慢的其他原因。
调查。90 分钟的常规服务器重启是痛苦的。如果您需要高可用性,这意味着您在一个节点上待了 1.5 小时只是为了重新启动(在修补期间经常发生这种情况)。这意味着您在技术上需要 3-4 个节点才能实现高可用性。这里有些东西很奇怪。我个人是不会接受的。
当服务器崩溃时,我可以理解。如果必须回滚可能需要 AGES 的事务日志。但是 MSMQ 不会正常处理产生许多 GB 的事务,并且 - 重新启动不应导致此处的过多操作。