Как увеличить количество сообщений, которые можно хранить в MSMQ - PullRequest
3 голосов
/ 09 ноября 2011

В нашей системе есть несколько очередей MSMQ, как частных, так и общедоступных.Иногда служба Windows, которая читает из очереди, аварийно завершает работу, и поэтому сообщения будут создаваться в этой очереди.Как только очередь достигнет определенного размера (возможно, 60K сообщений), все очереди на этом сервере перестанут работать, что приведет к ошибкам из-за недостатка ресурсов.

Мой вопрос: как на самом деле работают очереди за кулисами?они хранят сообщения в оперативной памяти или на жестком диске?Не хватает ресурсов и происходит сбой, когда серверу не хватает оперативной памяти?Если он использует некоторое выделенное пространство на жестком диске, есть ли способ увеличить допустимый размер?Если он использует ОЗУ, могу ли я просто добавить ОЗУ на серверы, и тогда это увеличит допустимый размер?

Мне нужно убедиться, что когда служба выйдет из строя, мы сможем обрабатывать 100К или 200К сообщений в этомочереди, пока мы работаем над исправлением службы, поскольку эти сообщения имеют решающее значение для нашего бизнеса.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Вот статья на MSDN, которая, кажется, решает ваш вопрос (как Джон указывает ниже, это относится только к Windows Server 2000, поэтому, вероятно, должно игнорироваться большинством людей): Управление ресурсами в приложениях MSMQ, В частности:

Для MSMQ 1.0 и MSMQ 2.0 объединенный размер сообщений, которые можно хранить на одной машине, не ограничивается объемом оперативной памяти на машине или размером жесткого диска, а объемом предоставленного виртуального адресного пространства. в службу MSMQ операционной системой (это ограничение было снято в MSMQ 3.0). Каждому процессу на компьютере x86 выделяется виртуальная 4 ГБ адресуемой памяти. 2 ГБ зарезервированы для использования в режиме ядра и 2 ГБ для режима пользователя. MSMQ Queue Manager работает в пользовательском режиме и, следовательно, имеет адресуемые 2 ГБ виртуального адресного пространства для работы. Данные каждого сообщения хранятся в ОЗУ, которое резервируется файлом подкачки системы или файлами отображения памяти. MSMQ использует файлы отображения памяти для хранения как экспресс-, так и восстановимых сообщений. Поскольку мы ограничены 2 ГБ адресуемой памяти, мы ограничены объемом 2 ГБ сообщений на диске. Если принять во внимание объем памяти, используемой кодом MSMQ и его внутренними структурами данных, а также распределение файлов для хранения файлов сообщений на диске, мы получаем от 1,4 до 1,6 ГБ сообщений, которые можно хранить на диске.

Примечание. Это ограничение в 1,6 ГБ может быть увеличено до приблизительно 2,6 ГБ путем включения настройки 3 ГБ в службе MSMQ. См. Q171793 для получения дополнительной информации о том, как включить настройку 3 ГБ.

Редактировать: ссылка на настройку, кажется, не работает. Я считаю, что это должно указывать здесь .

Что касается более поздних версий MSMQ, Джон обсуждает эту проблему в сообщении в блоге .

Максимальное количество сообщений

С этим не так просто разобраться. Из моего поста «Недостаточно ресурсов» мы знаем, что для каждого сообщения требуется 75 байтов памяти ядра для индексации, поэтому, например, для 2 миллионов сообщений потребуется примерно 150 мегабайт. Казалось бы, поэтому, что все, что вам нужно сделать, это добавить больше оперативной памяти. Однако, после сравнения 32-разрядных и 64-разрядных архитектур памяти вам придется быстро перейти на 64-разрядную платформу, чтобы воспользоваться вашими инвестициями, так как 32-разрядные машины максимально используют 450 МБ памяти выгружаемого пула. независимо от количества установленной оперативной памяти.

Но, опять же, если вы пытаетесь определить, какой объем ОЗУ будет генерировать память выгружаемого пула, необходимую для размещения миллиарда сообщений MSMQ, ваша проектная спецификация заслуживает серьезного рассмотрения.

0 голосов
/ 10 ноября 2011

Не уверен насчет подробного ответа, но на поверхностном уровне, так или иначе, нетранзакционная очередь хранит сообщения в памяти, тогда как транзакционная очередь хранит сообщения на диске.

ОБНОВЛЕНИЕ

Как указывает Джон ниже, все сообщения хранятся на диске независимо от того, используются ли долговременные или недолговечные очереди.

...