Fehler, wenn der ram, der zum Speichern von Nachrichten in Message Queuing 2.0 verwendet wird, den zugewiesenen Arbeitsspeicher überschreitet

Dieser Artikel bietet Hilfe bei der Behebung eines Problems, das auftritt, wenn die Menge an RAM, die zum Speichern von Nachrichten in Microsoft Message Queuing 2.0 (MSMQ 2.0) verwendet wird, den zugewiesenen Arbeitsspeicher überschreitet.

Ursprüngliche Produktversion: Microsoft Message Queuing
Ursprüngliche KB-Nummer: 899613

Problembeschreibung

Wenn Sie eine Nachricht an eine Warteschlange senden, akzeptiert MSMQ die gesendete Nachricht nicht. Stattdessen generiert MSMQ eine Fehlermeldung zu unzureichenden Ressourcen . Sie erhalten diese Fehlermeldung in der Anwendung, die MSMQ 2.0 zum Senden von Nachrichten verwendet.

Wenn dieses Problem auftritt, können die folgenden Informationen in der Stapelüberwachung eines .NET Framework Diensts oder einer Anwendung angezeigt werden:

Ausnahmetyp: System.Messaging.MessageQueueException
MessageQueueErrorCode: InsufficientResources
Meldung: Unzureichende Ressourcen zum Ausführen des Vorgangs.
ErrorCode: -2147467259
TargetSite: Void SendInternal(System.Object, System.Messaging.MessageQueueTransaction, System.Messaging.MessageQueueTransactionType)
HelpLink: NULL
Quelle: System.Messaging

Darüber hinaus wird die obige Meldung im Anwendungsprotokoll protokolliert. In einer COM+ Queued Component (QC)-Anwendung wird die obige Meldung möglicherweise im Anwendungsprotokoll protokolliert. Dieses Problem tritt auf, wenn die folgenden Bedingungen erfüllt sind:

  • Sie versuchen, eine Nachricht in MSMQ zu senden.

  • Der zugewiesene Arbeitsspeicher, der derzeit zum Ausführen des Diensts und zum Speichern von Nachrichten verwendet wird, hat 2 Gb erreicht. Standardmäßig weist Windows 2000 einem Prozess 2 GB adressierbaren Arbeitsspeicher zu.

    Nachdem der MSMQ-Dienst geladen wurde, liegt die Standardmenge des zugewiesenen Arbeitsspeichers, der MSMQ 2.0 zum Speichern von Nachrichten zur Verfügung steht, zwischen 1,6 GB und 1,8 GB.

    Hinweis

    Wenn Sie den Switch mit 3 GB verwenden, liegt der zugewiesene Arbeitsspeicher zwischen 2 GB und 2,5 GB.

    Nachrichtenspeicherdateien sind speicherabbildete Dateien. Daher können Sie sehen, ob der Grenzwert überschritten wurde, indem Sie die Größe des MSMQ-Speicherordners überprüfen. Dieser Ordner befindet sich in der Regel im %WinDir%\System32\MSMQ Ordner Storage. Der Speicherordner kann jedoch für einen anderen Speicherort konfiguriert werden. Um festzustellen, ob der Speicherordner für einen anderen Speicherort konfiguriert wurde, suchen Sie im MSMQ-Tool in Systemsteuerung im Feld Ordner für Nachrichtendateien auf der Registerkarte Speicher.

Ursache

Das Problem tritt aus einem oder mehreren der folgenden Gründe auf:

  • Bei der Anwendung, die die in den Warteschlangen eingehenden Nachrichten liest und verarbeitet, treten Probleme auf. Nachrichten gelangen jedoch weiterhin schneller in die Warteschlangen als die Rate, mit der die Anwendung die Nachrichten lesen und verarbeiten kann.

  • Journaling ist in den Warteschlangen aktiviert. Die Daten, die dazu führen, dass Nachrichten akkumuliert werden, wurden jedoch nicht gelöscht.

  • Unzustellbare Nachrichten sind in den Warteschlangen aktiviert. Darüber hinaus wurde die Menge des zugewiesenen Arbeitsspeichers, der zum Speichern von Unzustellbaren Nachrichten verfügbar ist, erreicht oder überschritten.

  • Nachrichten haben sich in der ausgehenden Warteschlange angesammelt, da die Zielwarteschlange nicht verfügbar ist.

Lösung

Die Methode, die Sie zum Beheben dieses Problems verwenden, hängt vom aktuellen status des MSMQ-Diensts ab. Bevor Sie dieses Problem beheben können, müssen Sie die Dienste oder Anwendungen beenden, die in die Warteschlangen schreiben.

Wenn MSMQ ausgeführt wird

Bestimmen Sie, welche Warteschlangen Nachrichten gesammelt haben. Verwenden Sie dazu eine der folgenden Methoden:

  • Untersuchen Sie die Warteschlangen manuell mithilfe der MSMQ-Schnittstelle. Die MSMQ-Schnittstelle befindet sich in der Computerverwaltungskonsole.

  • Legen Sie Leistungsmonitor alle Leistungsindikatoren für das MSMQ QUEUE-Leistungsobjekt fest. Wählen Sie dann Berichtsansicht aus. In der Berichtsansicht können Sie die Anzahl der Nachrichten in jeder Warteschlange anzeigen.

Nachdem Sie ermittelt haben, welche Warteschlangen Nachrichten angesammelt haben, müssen Sie ermitteln, warum sich die Nachrichten angesammelt haben. Es gibt mehrere mögliche Gründe, warum Sich Nachrichten in den Warteschlangen ansammeln können. Dazu gehören die folgenden Gründe:

  • Die Nachrichten, die sich in der Warteschlange für ausgehende Nachrichten befinden, können ihre Ziele nicht erreichen. Wenn die Nachrichten ihr Ziel nicht erreichen können, stellen Sie sicher, dass der Zielcomputer zum Empfangen von Nachrichten verfügbar ist. Wenn diese Nachrichten veraltet sind oder keinen Wert haben, löschen Sie die Warteschlange.

  • Die Anwendung, die Nachrichten empfangen soll, wurde beendet oder hat eine Fehlerbedingung eingegeben. Wenn eine dieser Bedingungen zutrifft, beheben Sie das Problem in dieser Anwendung.

  • Die Nachrichten in den Warteschlangen für unzustellbare Nachrichten oder in den Journalwarteschlangen wurden beibehalten. Diese Nachrichten wurden nicht entfernt oder verarbeitet. Wenn diese Nachrichten beibehalten wurden, bestimmen Sie den Zweck für die Aufbewahrung dieser Nachrichten. Die Option zum Journalieren von Nachrichten wird häufig für Tests verwendet.

Nach Abschluss des Tests wird diese Option möglicherweise unbeabsichtigt aktiviert. Wenn die Nachrichten unzustellbare Nachrichten sind, wurden die Nachrichten nicht innerhalb eines angegebenen Zeitraums verarbeitet oder übermittelt. Wenn deadlettering oder journaling aktiviert ist, sollte ein Prozess diese Nachrichten aus der Warteschlange lesen. Wenn Sie die Warteschlangen identifiziert haben, in denen sich Nachrichten angesammelt haben, können Sie die gesammelten Nachrichten löschen.

Wenn MSMQ nicht ausgeführt wird und Sie es nicht manuell starten können

Hinweis

  • Bevor Sie Änderungen an den Dateien im MsMQ-Speicherordner vornehmen, sollten Sie die aktuelle MSMQ-Umgebung mithilfe von MQbkup.exe sichern. Dieser Schritt ist sehr wichtig, wenn Sie Hilfe von Product Support Services benötigen.

  • Da MSMQ in einen instabilen Zustand eingetreten ist, können Sie möglicherweise nicht alle Nachrichten wiederherstellen. Wenn Bei der Wiederherstellung von Nachrichten mit den folgenden Schritten Probleme auftreten und die Daten sehr wichtig sind, wenden Sie sich an den Produktsupport, um Hilfe zu erhalten.

Führen Sie die folgenden Schritte aus, um die MSMQ-Konfiguration mithilfe von MQbkup.exe zu sichern.

Hinweis

Bevor Sie MQbkup.exe ausführen, wählen Sie einen Ordner aus, in dem Sie die MSMQ-Dateien sichern möchten. Dieser Ordner muss sich auf einem Datenträger befinden, der über mindestens 2,5 GB verfügbaren Speicherplatz verfügt.

  1. Öffnen Sie ein Eingabeaufforderungsfenster.

  2. Ändern Sie das Verzeichnis in %WinDir%\System32.

  3. Führen Sie den folgenden Befehl aus:

    MQbkup.exe -b Drive :\ Folder to Put Backup Files
    
  4. Notieren Sie sich den Speicherort des Ordners, in dem Sie die MSMQ-Dateien gesichert haben.

Starten des Servers mithilfe des 3-GB-Switches

Hinweis

Der 3GB-Switch ist nur eine Option für Windows 2000 Advanced Server. Wechseln Sie für Windows 2000 Server und Windows 2000 Professional zum Abschnitt So stellen Sie Ihre Nachrichten manuell wieder her .

Standardmäßig weist Windows 2000 jedem Prozess 2 GB adressierbaren Arbeitsspeicher zu. Dieses Problem tritt auf, weil MSMQ die gesamte Zuordnung verwendet. Dieses Verhalten verhindert, dass der Dienst ordnungsgemäß neu gestartet wird. Wenn Sie den 3-GB-Switch verwenden, weist Windows 2000 Advanced Server jedem Prozess 3 GB adressierbaren Arbeitsspeicher zu. Diese Konfiguration bietet MSMQ ausreichend adressierbaren Arbeitsspeicher, um den Dienst und die Nachrichtenspeicherdateien nach dem Neustart des Servers zu laden. Dieser Switch erhöht den MSMQ-Speicher auf 2 GB bis 2,5 GB.

Warnung

Diese Konfiguration kann sich auf andere Ressourcen auf dem Server auswirken. Es wird empfohlen, den 3GB-Switch zu entfernen, nachdem Sie die Problembehandlung abgeschlossen haben. Mit dieser Konfiguration soll das Problem nicht dauerhaft behoben werden. Sie können diese Konfiguration jedoch für den Zugriff auf MSMQ verwenden, sodass Sie die Schritte im Abschnitt Wenn MSMQ ausgeführt wird ausführen können.

Weitere Informationen zum Konfigurieren von Windows für die Ausführung mithilfe des 3-GB-Schalters finden Sie im Thema Aktivieren der Unterstützung für die Optimierung des Anwendungsspeichers in Ihren Anwendungen in der Windows 2000-Hilfedatei.

So stellen Sie Ihre Nachrichten manuell wieder her

Hinweis

  • Führen Sie diese Schritte nur aus, wenn SICH MSMQ in einem nicht ausgeführten Zustand befindet.
  • Da SICH MSMQ in einem instabilen Zustand befindet und nicht gestartet wird, können Sie möglicherweise nicht alle Nachrichten wiederherstellen.

Warnung

Dieser Prozess kann dazu führen, dass eine Anwendung Transaktionsnachrichten in einer anderen Reihenfolge empfängt als die Reihenfolge, in der die Nachrichten ursprünglich eintrafen.

  1. Erstellen Sie einen temporären Ordner für Ihre Nachrichtenspeicherdateien. Platzieren Sie diesen Ordner nicht im Ordner MSMQ.

  2. Wählen Sie nur die Dateien aus, die die Dateinamenerweiterung .mq aufweisen.

    Warnung

    Einige Dateien, die sich im MsMQ-Speicherordner befinden, sind für die ordnungsgemäße Ausführung von MSMQ von entscheidender Bedeutung. Stellen Sie sicher, dass Sie nur die Dateien mit der Dateinamenerweiterung MQ auswählen.

  3. Verschieben Sie die ausgewählten Dateien in den Ordner, den Sie in Schritt 1 erstellt haben.

  4. Stellen Sie sicher, dass der MSMQ-Datenzugriffstreiber nicht gestartet wurde. Verwenden Sie dazu den folgenden Befehl in einer Eingabeaufforderung:

    Net Stop MQAC /y
    
  5. Starten Sie den MSMQ-Dienst. Führen Sie dazu den folgenden Befehl an der Eingabeaufforderung aus:

    Net Start MSMQ
    

    Hinweis

    Wenn die Daten in den Nachrichten nicht wichtig sind und Sie MSMQ nur wieder online schalten möchten, können Sie hier aufhören.

  6. Nachdem Sie überprüft haben, ob der Dienst jetzt gestartet wird, beenden Sie den Dienst. Führen Sie dazu den folgenden Befehl an der Eingabeaufforderung aus:

    Net Stop MQAC /y
    

    Dieser Befehl beendet sowohl den MSMQ-Dienst als auch den Datenzugriffstreiber.

  7. Beachten Sie in dem Ordner, in den Sie die Nachrichtenspeicherdateien in Schritt 5 verschoben haben, dass einige Dateinamen das Format pNumber.mq und einige Dateinamen das Format lNumber.mq haben. Diese Dateien werden als Paare gespeichert. Jede p-Datei verfügt über eine entsprechende l-Datei .

    Beachten Sie die Datumsangaben, an denen die Dateien geändert wurden. Wählen Sie die älteste p-Datei und die entsprechende l-Datei aus. Verschieben Sie diese Dateien in den ursprünglichen MSMQ-Speicherordner.

  8. Führen Sie den Befehl in Schritt 5 aus, um den MSMQ-Dienst zu starten. Wenn der Dienst gestartet wird, führen Sie die Schritte im Abschnitt Wenn MSMQ ausgeführt wird aus, um zu bestimmen, in welchen Warteschlangen sich die Nachrichten ansammeln und wie die Nachrichten behandelt werden.

  9. Nachdem Sie die akkumulierten Nachrichten aus den Warteschlangen entfernt haben, wiederholen Sie die Schritte 6 bis 8, bis Sie alle Nachrichtendateien an den MSMQ Storage-Ordner zurückgegeben und alle anhäufenden Nachrichten aus den Warteschlangen entfernt haben.

    Hinweis

    Verschieben Sie nicht mehr als 1,6 GB Daten gleichzeitig zurück in den MSMQ Storage-Ordner. In diesem Fall wird der Dienst möglicherweise nicht gestartet.

Schritte zum Reproduzieren des Problems

Senden Sie auf einem Computer, auf dem Windows 2000 Server ausgeführt wird, Nachrichten an eine lokale Warteschlange, bis die Anwendung, die Sie zum Senden der Nachrichten verwenden, einen 0x00e0027 Ausnahmefehler empfängt.

MSMQ 2.0 speichert Nachrichten in speicherabbildeten Dateien. Auf einem Computer, auf dem Windows 2000 Server ausgeführt wird, beträgt der für MSMQ 2.0 verfügbare Standardspeicher 2 GB. Nachdem die Komponenten von MSMQ 2.0 auf den Computer geladen wurden, wird der für MSMQ 2.0 verfügbare Speicherplatz auf ca. 1,6 GB bis 1,8 GB reduziert.

Wenn Sie den 3-GB-Switch in der Boot.ini-Datei aktivieren, erhöht sich der für MSMQ 2.0 verfügbare Speicherplatz auf 3 GB. Nachdem die Komponenten von MSMQ 2.0 auf den Computer geladen wurden, wird der für MSMQ 2.0 verfügbare Speicherplatz auf 2,7 GB reduziert.

Der zusätzlich zugewiesene Arbeitsspeicher nimmt jedoch auch ca. 1 GB zugeordneten Arbeitsspeicher aus dem Kernel ab. Dieses Verhalten kann sich auf die Systemleistung und auf Anwendungen auswirken, die Datei-E/A ausführen.

Es wird nicht empfohlen, den 3-GB-Switch nur zu verwenden, um die Menge des zugewiesenen Arbeitsspeichers zu erhöhen, der für MSMQ 2.0 verfügbar ist. Stattdessen wird empfohlen, ein Computerkontingent einzurichten, um das im Abschnitt Symptome erwähnte Problem zu verhindern.

Weitere Informationen finden Sie unter Einrichten von Computerkontingenten und Warteschlangenkontingenten in Microsoft Message Queuing.