Как очистить очередь сообщений windows

Важно! В этой статье приводятся сведения о том, как изменить реестр. Прежде чем вносить изменения, убедитесь, что вы заархивированы в реестр. Убедитесь в том, что вы знаете, как восстановить реестр в случае возникновения проблемы. Чтобы получить дополнительные сведения о том, как создавать резервные копии, восстанавливать и изменять реестр, щелкните следующий номер статьи базы знаний Майкрософт:

256986 Описание реестра Microsoft Windows

Симптомы

Файлы сообщений очереди сообщений Microsoft будут накапливаться и удаляются только при запуске службы очереди сообщений.Примечание. Microsoft Message Queuing также называется MSMQ.

Причина

Служба очереди сообщений удаляет все пустые файлы сообщений для обнаруживаемых и транзактных сообщений при запуске. Файлы хранилища транзактных сообщений с возможностью восстановления и Lnnnnnnn.MQ и Pnnnnnnnn.MQ или Jnnnnnnn.MQ будут составлять пару.Чтобы получить дополнительные сведения о файлах каталога хранилища, щелкните следующий номер статьи базы знаний Майкрософт:

174307 Интерпретация имен файлов в каталоге хранения на сервере очереди сообщений (Microsoft) и в Microsoft Message QueuingЕсли вы не перезапустите службу очереди сообщений, использование дискового пространства останется в максимальной нагрузке с момента последнего перезапуска службы очереди сообщений.

Решение

Внимание! Внесение неправильных изменений в реестр с помощью редактора реестра или иным способом может привести к возникновению серьезных проблем. Эти проблемы могут привести к необходимости переустановки операционной системы. Корпорация Майкрософт не гарантирует, что эти проблемы удастся решить. При изменении реестра полагайтесь на свой опыт и знания.В следующем исправлении устанавливается периодическая очистка пустых файлов сообщений Message Queuing. Интервал по умолчанию для очистки равен шести часам. Этот интервал можно изменить с помощью нового раздела реестра. Чтобы изменить интервал по умолчанию, необходимо добавить MessageCleanupInterval в реестр.

  1. Запустите редактор реестра (REGEDT32. EXE).

  2. Найдите и выделите следующий подраздел реестра:

    HKEY_LOCAL_MACHINE\ Software\Microsoft\MSMQ\Parameters

  3. В меню Правка выберите команду Добавить значение.

  4. В поле имя значениявведите MessageCleanupInterval.

  5. В поле Тип данныхвыберите REG_DWORD.

  6. Введите нужное значение в миллисекундах (например, 3600000 (десятичное число) для одного часа).

  7. Чтобы сохранить изменения, закройте редактор реестра .

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

Статус

Корпорация Майкрософт подтвердила, что это ошибка в продуктах Майкрософт, перечисленных в начале этой статьи. Эта ошибка была исправлена в Windows NT 4,0 с пакетом обновления 4.

Ссылки

Руководство администратора MSMQ; раздел: Доставка сообщений

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

8 часов назад, youneuoy сказал:

а почему бы не воткнуть туда PeekMessage?

В главный MessageLoop? Там лучше использовать GetMessage, чтобы не было потребления процессорного времени в отсутствии сообщений.

8 часов назад, youneuoy сказал:

Ну и std thread довольно удобная штука, а в отличие от виндовых функций ещё и кроссплатформенная. Зря не пользуешься.

_beginthreadex использую из-за совместимости с CRT функциями. Не знаю как в этом плане ведет себя std::thread, скорее всего, по логике, std::thread должна быть также совместима. Но, так как в я пока не чувствую себя ущемленным при использоании _beginthreadex , я не перехожу на std::thread.

Кроссплатформенность мне пока не по карману, иначе нужно весь код писать в таком стиле.

8 часов назад, youneuoy сказал:

почему?

Мне известно только 3 вида таймера.

— Стандартный таймер (WM_TIMER Post сообщение). Он не подходит. Неизвестно когда до него дойдет очередь, а мне нужен точный интервал. Плюс из-за него подвисает главный поток, в котором он обрабатывается, незначительно, но все же. Даже если для таймера использовать свою отдельную процедуру.

— Мультимедийный таймер. Он тоже не подходит. Он устарел. Плюс для обработки своей процедуры он использует свой поток.

— CreateTimerQueueTimer. Но там может возникнуть ситуация, что создастся новый поток. Но зачем мне это, я могу тогда сам создать поток.

8 часов назад, youneuoy сказал:

не хочешь поток — используй PeekMessage

Нет, я хочу использовать другой поток. Один поток на все дерево PopupMenu. Он контролирует задержки, плавность появления/скрытия. Он создается и удаляется только для главного родительского PopupMenu окна. Но, @Xipho говорит что это не лучший вариант.

1 час назад, Xipho сказал:

Да в смысле название функций? Самописный планировщик.

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

Понятно, я думал что это какой-то предопределенный механизм WinAPI.

А как он будет устроен, этот самописный планировщик. Что из себя он будет представлять? Это какой-то отдельный поток, который создается в начале работы приложения, и удаляется после его завершения? И например у него есть буферная очередь с заданиями. Опиши вкратце его схему. Мне уже не столько интересно это для проекта, сколько просто, для себя, что ты там такое придумал, чего я не нашел ни в интернете ни у себя в голове.

1 час назад, Xipho сказал:

В край, конечно, можно упороться и по PeekMessage, но лично моё мнение — это изврат.

Как понять по PeekMessage? Это то что предлагал выше @youneuoy? Даже если воткнуть вместо GetMessage, PeekMessage, то что это меняет? Кто подаст команду/сообщение в очередь сообщений Потока А? Ведь в этом вся суть проблему, — кто будет инициатором для главного потока. Главный поток только имеет право создавать окна, по задумке.

Использовать PeekMessage чтобы поток не засыпал? Ну хорошо, используем, поток не спит, а дальше что? Кто отсчитывает интервал, кто подает нужное сообщение. Сам Поток А, используя что-то вроде GetTickCount? Что-то так себе такая схема.


Изменено пользователем Antonshka

В Windows предусмотрен механизм обратной связи, в котором она генерирует отчеты об ошибках в программном и аппаратном обеспечении. Эти отчеты временно хранятся в системе и отправляются обратно в Microsoft, чтобы она могла найти решение этих проблем и исправить это в будущих обновлениях. Со временем эти отчеты могут занимать много места в системе. Конечные пользователи могут свободно удалять их, используя совершенно новую функцию Free Up Space. Однако иногда вы не сможете этого сделать. В этом посте мы расскажем, как удалить очень большие файлы отчетов об ошибках Windows из очереди , которые могут работать в гигабайтах.

Когда WER отправляет файл ошибок и ищет решение, сервер WER в Microsoft мгновенно отправляет решение, если оно есть. В случае, если решение находится в стадии расследования или неизвестно, конечный пользователь получает уведомление об этом и может запросить дополнительную информацию.

Содержание

  1. Удалить системные сообщения Windows об ошибках в очереди
  2. Удалите файлы отчетов об ошибках Windows с помощью настроек
  3. Удалите файлы отчетов об ошибках Windows вручную

Удалить системные сообщения Windows об ошибках в очереди

Хотя инструмент «Свободное пространство» в «Настройках» может очищать эти файлы отчетов об ошибках, иногда он не может удалить очень большие файлы отчетов об ошибках Windows, поставленные в очередь в системе. Опция удаления файлов сообщений об ошибках Windows в очереди также существует в утилите очистки диска.

Удалите файлы отчетов об ошибках Windows с помощью настроек

Перейдите в «Настройки»> «Система»> «Хранилище»> «Свободное место» и нажмите, чтобы запустить его.

Дайте время для заполнения всех файлов и папок. После этого выберите только Созданные системой файлы отчетов об ошибках Windows .

Нажмите на кнопку Удалить файлы, и она должна удалить их все.

Примечание. Несмотря на то, что вы можете использовать средство очистки диска, оно удаляется из следующей версии Windows.

Удалите файлы отчетов об ошибках Windows вручную

  • Откройте проводник и включите представление «Скрытые файлы» из меню.
  • Перейдите в C: \ ProgramData \ Microsoft \ Windows \ WER \ .
  • Здесь вы найдете несколько папок, включая LocalReportArchive, ReportArchive, ReportQueue и Temp.
  • Вам придется открыть каждую из этих папок и удалить все архивные файлы.
  • Эти файлы будут иметь имя, похожее на 00c58c1f-b836-4703-9bcf-c699ca24d285.

Если вы не можете удалить файлы, возможно, вам придется вступить во владение этими папками, а затем выполнить действие.

Отключить отчеты об ошибках Windows

Если это становится для вас обычным раздражением из-за того, что файлы генерируются каждый день и имеют размер в гигабайты, лучше всего отключить службу отчетов об ошибках Windows на некоторое время. Иногда служба WER не может загрузить эти файлы на сервер Microsoft WER, и они остаются позади, занимая много места.

  • Remove From My Forums
  • Question

  • I’m using VS 2005 VB and have created an app that uses multiple forms to simulate the multiple pages of a document. When the user clicks the Next Page button on page 1, the page 1 form is hidden and the page 2 form displayed. The problem is, by the time page 2 appears, the user has often clicked again, and that click gets passed through to page 2, causing it to skip immediately to page 3. I need a command to clear or purge the Windows message queue at the end of the sub that advances the page, so impatient extraneous clicks don’t cause additional unwanted page advances.

Answers

  • Abdel.Raheim, Thanks. I think using event masks would work, but part of the problem is users impatiently clicking on the Next Page button of the new page AFTER it’s been displayed (and the event mask removed) but before they’ve had time to recognize that their goal has been accomplished. Anyway, all this made me recall back around 1980 when I was programming a handheld calculator and «key bounce» was a ubiquitous problem: due to the springiness of the buttons, when one was pushed you would often get several hardware interrupts in a fraction of a second, although the user only intended to punch the button once. The solution was to set a timer to block additional interrupts for a fraction of a second after the first one came through. «De-bouncing» it was called. Nowadays, apparently de-bouncing is normally done by the OS, if not by a microprocessor in the keyboard or mouse. Anyway, I tried the following variation of de-bouncing, which works well:

    Public PageShownTime as DateTime

    Public Sub RequestPageForward(ByVal form As Object)

                If DateDiff(DateInterval.Second, PageShownTime, Now) < 0.5 Then Return

                Cursor.Current = Cursors.WaitCursor

               

                ‘Do stuff to advance to next page.

               

                Cursor.Current = Cursors.Default

                PageShownTime = Now

    End Sub

    Thanks for your help.  — Dr Dan

Обновлено Обновлено:
Опубликовано Опубликовано:

Тематические термины: Exchange, Powershell, SMTP.

В случае проблем отправки электронной почты, часто необходимо просматривать очередь сообщений. В MS Exchange для этого есть, по меньшей мере, 2 инструмента — графическая консоль и Powershell.

Средство просмотра очереди
    Просмотр
    Описание
    Действия
Powershell
    Просмотр
    Примеры использования
    Чистка
    Повторная отправка
    Приостановка
    Возобновление
Почему письма висят в очереди
    Часто встречаемые проблемы
    Время жизни очереди
Скрипт мониторинга
Дополнительная информация
    Типы очередей
    Где хранятся очереди
    Смена пути расположения очереди
Читайте также

Консоль управления Exchange (GUI)

Графическая консоль удобна для быстрого периодического осмотра очереди или поиска сообщения.

Просмотр

Запускаем Консоль управления Exchange — переходим в раздел Инструменты — кликаем по Средство просмотра очереди:

Открываем средство просмотра очереди

Откроется список почтовых доменов, на которые недавно были попытки отправить сообщения. В первую очередь, нас интересует колонки «Количество сообщений» и «Последняя ошибка» — для решения проблем смотрим их:

Список очередей Exchange

Описание колонок

  1. Тип доставки — определяет способ отправки писем и следующее действие (или очередь), которое будет выполнено с пересылаемым письмом. Может быть:
    • DNSConnectorDelivery. Доставка с помощью SMTP-соединителя, созданного на локальном сервере. Разрешение маршрутизации с помощью DNS.
    • NonSmtpGatewayDelivery. Используется  очередь для доставки с помощью локального коннектора. SMTP не используется.
    • SmartHostConnectorDelivery. Доставка внешнему получателю с помощью SMTP-соединителя. Разрешение маршрутизации с использованием промежуточного узла.
    • SmtpRelayWithinAdSitetoEdge. Отправка письма внешнему получателю с помощью соединителя SMTP, который находиться на пограничном транспортном сервере.
    • MapiDelivery. Доставка локальным получателям.
    • SmtpRelayWithinAdSite. Сообщения помещаются в очередь для доставки на транспортный сервер-концентратор, находящийся на том же узле Active Directory, что и локальный сервер.
    • SmtpRelaytoRemoteAdSite. Сообщения помещаются в очередь для доставки на сервер, находящийся на удаленном узле Active Directory.
    • SmtpRelaytoTiRg. Сообщения помещаются в очередь для доставки группе маршрутизации Exchange Server 2003.
    • Undefined. Сообщения помещаются в очередь отправки, а следующий пункт назначения прыжка еще не определен.
    • Unreachable. Эти сообщения помещаются в очередь «Недостижимо», и задать маршрут к получателю невозможно.
  2. Состояние — состояние очереди для конкретного домена.
    • Активно или Установка связи. Передача выполняется в данный момент.
    • Приостановлено. Передача не выполняется, и не будет выполняться автоматически.
    • Готово. Передача закончена, сообщений нет в очереди.
    • Повторить. Передача не выполняется, повторные попытки будут предприняты в ближайшее время.
  3. Количество сообщений — отображает количество писем в очереди на отправку. Если 0, писем в очереди нет и в ближайшее время список должен пропасть. При наличии писем в очереди со статусами «Повторить» или «Приостановлено» говорит о том, что в результате отправки всех или некоторых писем до данного адресата, возникли ошибки.
  4. Время следующей попытки — дата и время, когда сервер отправит письмо. Как правило, можно увидеть со статусом «Повторить».
  5. Последняя ошибка — отображает код и текст последнее ошибки, которая возникла во время отправки сообщения.

Для поиска писем по критериям, возможно создать фильтр:

Создание фильтра при поиске очереди Exchange

Варианты фильтра при поиске сообщений в очереди Exchange

Возможные действия

Кликнув правой кнопкой мыши по списку очереди, мы получаем список возможных действий:

Возможные действия с очередью Exchange

  • Посмотреть сообщения — отобразит список писем, которые входят в очередь для данного адресата.
  • Приостановить — не выполнять попыток отправлять письма.
  • Удалить сообщения (с отправкой отчета о недоставке) — очередь чиститься, отправителю отправляется уведомление.
  • Удалить сообщения (без отправки отчетов о недоставке) — очередь чиститься, отправителю ничего не отправляется.

Powershell

Powershell позволит автоматизировать некоторые задачи по работе с очередями.

Просмотр

Синтаксис:

Get-Queue [-Filter Фильтр] [-Server Сервер] <Параметры запроса>

Пример:

Get-Queue | fl

Примеры использования

Отобразить очереди, в которых более 50-и писем.

Get-Queue -Filter { MessageCount -gt 50 }

Посмотреть сообщения для конкретной очереди:

Get-Queue -Identity mx\615820 | Get-Message

* где mx\615820 — идентификатор очереди, который мы смотрим командой Get-Queue.

Посмотреть все очереди на всех транспортных серверах:

Get-TransportServer | ForEach { Get-Queue -Server $_.Name }

Подробная информация об очереди:

Get-Queue -Identity mx\615820 | Format-List

* где mx\615820 — идентификатор очереди, который мы смотрим командой Get-Queue.

Подробная информация о письмах в очереди от определенного отправителя:

Get-Message -Filter { FromAddress -like «user@dmosk.local» } | Format-List

Список отправителей для определенной очереди:

Get-Queue mx\726931 | Get-Message -ResultSize Unlimited | Select FromAddress

Список получателей:

Get-Queue mx\726931 | Get-Message -ResultSize Unlimited -IncludeRecipientInfo | Select Recipients

Очистить очередь

Удалить сообщения в очереди:

Get-Queue -Identity mx\Poison | Get-Message -ResultSize unlimited | Remove-Message -WithNDR $False

* где mx\Poison — название очереди.

Удалить все сообщения:

Get-Queue | Get-Message -ResultSize unlimited | Remove-Message -WithNDR $False

Удалить сообщение по фильтру:

Get-Queue | Get-Message -ResultSize unlimited | Where {$_.Subject -eq «Тема письма»} | Remove-Message -WithNDR $False

Повторная отправка очереди

Выполняется с помощью командлета Retry-Queue:

Retry-Queue -Filter {Status -eq «Retry»}

* данная команда принудительно повторит отправку всех сообщений, у которых активен статус «Повторить».

Для повторной отправки из очереди подозрительных сообщений, сначала смотрим письма:

Get-Message -Queue Poison

И повторяем попытку отправки с использованием идентификатора письма:

Resume-Message mx\Poison\162514

* где mx\Poison\162514 — полный идентификатор сообщения (mx — сервер, Poison — очередь, 162514 — id письма).

Приостановка очереди

Выполняется командлетом Suspend-Queue:

Suspend-Queue mx\173625

Остановить отправку сообщений, которые находятся в очереди с более чем 500 писем:

Suspend-Queue -Filter {MessageCount -ge 500 -and Status -eq «Retry»}

Возобновить приостановленную очередь

Resume-Queue -Filter {Status -eq «Suspended»}

Почему письма висят в очереди

Помещение письма в очередь при отправке — обычный процесс в работе любого почтового сервера. Сообщения, которые успешно отправляются, сразу пропадают из очереди, но при возникновении проблем, система пытается совершить повторные попытки отправки, а письма могут долго висеть в этой очереди, пока не отправятся или не истечет установленный администратором срок.

Часто встречаемые проблемы, из-за которых письма висят в очереди

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

  1. 451 4.4.0 primary target ip address responded with… Ваш сервер не смог отправить сообщение на mx получателя (причина поясняется после with).
  2. 451 4.4.0 DNS query failed. Неудачная попытка при разрешении MX-записи в DNS. Выполните вручную nslookup с почтового сервера, чтобы убедиться в работоспособности запросов DNS.
  3. 450 4.7.1 Helo command rejected: Host not found. Получатель отказался принять от нашего сервера команду приветствия из-за того, что не может найти имя нашего сервера в DNS. Необходимо убедиться в правильности настройки последнего для соответствующей зоны (записи A и PTR).
  4. 451 4.7.0 Temporary server error. Please try again later. Как правило, ошибка связана с невозможностью разрешать записи в DNS. Ошибка может носить временный характер, а может возникнуть из-за неправильных настроек сети.

Время жизни сообщения в очереди

Посмотреть:

Get-transportserver MX | Select MessageExpirationTimeout

* где MX — имя транспортного сервера. По умолчанию, равен 2.00:00:00 (2 дня).

Поменять:

Set-TransportServer MX -MessageExpirationTimeout 3.00:00:00

* где MX — имя транспортного сервера.

Скрипт мониторинга очередей

Пример рабочего скрипта на Powershell:

Set-PSDebug -Off
 

$username = «dmosk\admin»
$password = cat C:\Scripts\password.txt | convertto-securestring
$threshold_count = 100
 

$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://mx.dmosk.local/powershell -Credential $cred
Import-PSSession $session
 

function Send-Alert () {
    $it = «Дмитрий <master@dmosk.ru>»
    $from = «Служба проверки очереди сообщений <queue_check@dmosk.local>»
    $subject = «Необходимо проверить транспорт почты»
    $bodyMessage = «Есть очереди, превышающие допустимое количество писем»
    $enc  = New-Object System.Text.utf8encoding
    Send-MailMessage -to $it -from $from -Subject $subject-bodyAsHTML $bodyMessage -smtpServer mx.dmosk.local -Encoding $enc
}
 

Get-TransportServer | ForEach {
    Retry-Queue -Filter {Status -eq «Retry»}
}
 

Start-Sleep -s 300
 

Get-TransportServer | ForEach {
    Get-Queue -Server $_.Name -Filter { MessageCount -gt $threshold_count } | ForEach {
        Send-Alert
        echo 2
        break
    }
}

Что происходит:

  1. Подключаемся к серверу Exchange с логином admin и паролем, хэш которого хранится в файле C:\Scripts\password.txt (заранее создан командой read-host -assecurestring | convertfrom-securestring | out-file C:\Scripts\password.txt).
  2. Форсируем запуск повторной отправки сообщений для всех очередей со статусом «Повторить».
  3. Ждем 5 минут (300 секунд).
  4. Проходим по транспортным серверам и ищем очереди с длинной более 100 сообщений. Если находим, отправляем письмо администратору и выводим на экран 2.

* важно отметить, что в случае проблем с почтой, письмо администратору может и не прийти. Именно для этого мы также выводим статус 2. Его можно проверять системой мониторинга, например Zabbix.

Дополнительная информация

Типы очередей

Существуют следую очереди:

  • Очереди доставки. Обычная очередь, содержащая письма для пересылки внешним и внутренним пользователям.
  • Очередь передачи. Не обработанные службой транспорта сообщения, но полученные ею.
  • Теневые очереди. Содержат копии отправляемых писем до момента подтверждения получения от mx-партнеров.
  • Очередь подозрительных сообщений. Изолированные сообщения, которые Exchange посчитал, потенциально, опасными. Это могут быть письма, содержащие зловредный код, а может быть и ложное срабатывание из-за ошибки программного обеспечения.
  • Сообщения с недостижимым местом назначения. Сообщения, которые не удалось доставить.

Где хранятся очереди Exchange

Очереди хранятся в базе данных ESE, которая находится в папке «%ExchangeInstallPath%TransportRoles\data\Queue»:

Список файлов в папке с очередями Exchange

* mail.que — основной файл с базой очередей; tmp.edb — временный файл для проверки схемы самой базы; trn.chk — контрольные точки для отслеживания записи в логах.

Со временем, файл mail.que может разрастись и занимать много места. Для полной чистки базы ее можно просто создать заново. Для этого открываем службы Windows — останавливаем Microsoft Exchange Transport (перестанет работать почта) — переименовываем папку Queue, в которой находятся файлы базы и снова запускаем службу транспорта. Папка и база очереди создастся снова.

Смена пути хранения очереди

Открываем на редактирование файл %ExchangeInstallPath%\Bin\EdgeTransport.exe.config (C:\Program Files\Microsoft\Exchange Server\V14\Bin\EdgeTransport.exe.config) и меняем значения ключей QueueDatabasePath и QueueDatabaseLoggingPath, например:

    <add key=»QueueDatabasePath» value=»D:\Queue» />
    <add key=»QueueDatabaseLoggingPath» value=»D:\Queue» />

* где QueueDatabasePath — папка хранения файлов очереди; QueueDatabaseLoggingPath — папка хранения файлов журналов очереди.

Читайте также

Получение статистики сообщений в MS Exchange

Работа с очередью в Postfix

  • Как очистить папку softwaredistribution windows 10
  • Как очистить очередь печати принтера windows 10 через командную строку
  • Как очистить папку автозагрузки в windows 10
  • Как очистить папку packages в windows 10
  • Как очистить оперативную память ноутбука windows 10