Praxistipp: Wie können Windows Desktop Heap-Probleme untersucht und gelöst werden? |
||||||||||||
Beim Installieren und Starten verschiedener Dienste unter Windows, kann das Problem auftreten, dass es nicht länger möglich ist, zusätzliche Dienste zu starten. Jeder Dienst weist eine bestimmte Menge an Speicher des intern genutzten Desktop Heap Bereichs zu, um Dinge wie Windows, Schriftarten, API-Elemente etc. zu speichern. Wenn dieser Desktop-Heap ausgeschöpft ist, können user32-System-Aufrufe beim Aufruf abbrechen. Leider ist es gegenwärtig nicht möglich, das Windows-System nach der Menge des verfügbaren Desktop-Heap Bereichs im Voraus abzufragen. Wenn der verfügbare Desktop Heap für den Wrapper-Prozess aufgebraucht ist, werden Sie sehr wahrscheinlich einen der folgenden Fehler antreffen:
Eine detaillierte Beschreibung zum internen Desktop-Heap kann auf einer externen Seite gefunden werden. Wenn der Dienst als ein nicht-interaktiver Dienst gestartet wird, ist auf einem 32-Bit Windows XP System die Standard Desktop Heap-Größe 512KB, aber dies variiert stark abhängig von der jeweiligen Windows-Version, die Sie am Laufen haben. Der Wrapper selbst belegt für jede Instanz zwischen 10-15 KB. Jedoch belegt auch jede gestartete JVM zumindest 20 KB. Der genaue Wert unterscheidet sich abhängig davon, was die ausgeführte Java-Anwendung gerade tut. Wenn der Heap-Bereich während des Ladens des Wrapper-Prozesses ausgeschöpft wird, werden Sie den oben beschriebenen Timeout erhalten. Wenn dieser ausgeschöpft ist, während die JVM geladen ist, dann sehen Sie eins der anderen Probleme. Wie geschrieben, ist es nicht möglich gewesen, einen Weg für den Wrapper zu finden, Windows nach der Menge des verbleibenden Desktop-Heaps abzufragen. Es ist möglich, die Desktop-Heap-Nutzung mit dem "Desktop Heap Monitor" Tool, welches von Microsoft angeboten wird, zu überwachen und festzustellen. Dieses Tool funktioniert, indem es als Treiber der Kernelebene ausgeführt wird, welche eine Zugriffsebene erfordert, die wir für die Nutzung des Wrappers nicht voraussetzen möchten.
Bitte lesen Sie auf der Microsoft-Site mehr bezüglich der Nutzung der dheapmon.
Wenn dheapmon.
In dem obigen Beispiel wird der Wrapper als nicht-interaktiver, unabhängiger Dienst, als System-User im Service-0x0-3e7$\Default ausgeführt. Das Starten von zusätzlichen nicht-interaktiven Diensten wie den Standard System-User wird die Heap-Nutzung dieses Desktops entsprechend erhöhen. Das Ausführen des Dienstes als einen interaktiven Dienst sorgt dafür, dass die Nutzung des WinSta0\Default-Heap-Bereichs wächst. Das Ausführen des Dienstes mit einem bestimmten Benutzerkonto erstellt eine neue WinStation\Desktop-Sitzung für jeden individuellen Dienst. Es gibt 2 gegenwärtig verfügbare Workarounds:
64-Bit-Versionen von Windows haben viel größere Standard Desktop-Heap-Größen, so werden Sie auf diesen Systemen wahrscheinlich viel seltener derartige Probleme antreffen. |