2

We recently had an issue where MSMQ (on Windows Server 2008 R2 in a workgroup) stopped sending messages. It turned out that it was because MSMQ had reached the message storage limit and was therefore responding to everything with the dreaded 'insufficient resources' error.

Fair enough so far, but here's the thing: As far as we could tell, the messages that were using up all the disc space were all destined for a queue on another machine (we're guessing that the other machine had temporarily stopped accepting messages for reasons that we haven't yet figured out, causing everything on the sending MSMQ to back up). So processing those messages should actually free up disc space. Indeed what we found was that as soon as we removed the message storage limit on the sending machine, the messages started being sent. And at some point later on (we didn't see when, but this thread MSMQ continues to grow even when there are no messages are in the queue indicates it would have been 6 hours later), all the p*****.mq messages that were occupying the disc space were cleaned up, allowing us to reinstate the storage limit.

It makes no sense to us that MSMQ would refuse to send those messages on account of storage limit exceeded, when sending the messages would have freed up storage. But all the evidence we have is that this is what happened. Can anyone confirm whether this is in fact how MSMQ behaves?

1 Answer 1

2

The status of the outgoing queue at the time would provide some insight.
What probably happened is the following:

1 MSMQ QM1 sends message
2 MSMQ QM2 sends back an acknowledgement message
3 Ack message cannot be delivered as quota exceeded
4 MSMQ QM1 cannot complete sending (I'm assuming transactional messages)
5 goto 1

As soon as quota lifted, these steps can complete successfully.

3
  • That makes sense as a possible explanation, thanks. You're correct that it was a transactional queue. Didn't realize the quota would prevent receipt of acknowledgements too Feb 22, 2013 at 12:59
  • And to answer about the outgoing queue - in server manager that was showing up as empty. The only oddity was that the we couldn't open the system journal queue - whenever we tried, server manager would simply hang. I'm fairly sure there were no messages in that queue either though - no j***.mq files in the storage folder. Feb 22, 2013 at 13:02
  • For quotas, MSMQ treats all messages equally. The outgoing queue appeared empty as the transactional message was flagged as hidden, awaiting acknolwedgement. The message is still on the sending machine to accommodate transactional rollback and only gets deleted when confirmation is received that it was successfully delivered (and read, if that extra acknolwedgement was requested). Mar 6, 2013 at 9:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .