【发布时间】:2011-12-25 14:57:45
【问题描述】:
我们的系统中有许多 MSMQ 队列,包括私有队列和公共队列。有时,从队列中读取的 Windows 服务会崩溃,因此消息会在该队列中堆积。一旦队列达到一定大小(可能是 60K 消息),该服务器上的所有队列都将停止工作,并抛出有关资源不足的错误。
我的问题是,队列在幕后是如何真正工作的,它们是将消息存储在 RAM 中还是硬盘上?当服务器内存不足时,它是否会耗尽资源并崩溃?如果它正在使用硬盘驱动器上的一些分配空间,有没有办法增加允许的大小?如果它使用 RAM,我可以简单地向服务器添加 RAM,然后增加允许的大小吗?
我需要确保当服务出现故障时,我们可以在修复服务时处理在该队列中存储 100K 或 200K 消息,因为这些消息对我们的业务至关重要。
【问题讨论】:
-
60,000 条消息是一个微不足道的数量,因此在您开始之前,您的服务器必须已经非常低的内核内存。添加 RAM 无济于事,因为大多数现代机器都配备了足够的 RAM 来最大化内核内存。您需要识别并移除内核内存占用。配置良好的机器可以处理数百万条消息。