Wie können Probleme gelöst werden, bei denen eine grosse Anzahl von Diensten mit dem Wrapper unter Windows laufen

Kompatibel :1.0.0
Editionen :Professional EditionStandard EditionCommunity Edition
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Wenn Dienste, die zusammen mit dem Wrapper laufen, installiert und gestartet werden, erreichen Sie ggf. einen Punkt, ab dem es unmöglich wird, einen weiteren Dienst zu starten.

Gewöhnliche Hinweise dafür sind:

  • Das Starten einer Anwendung führt unmittelbar zu einem Timeout. "Error 1053: The service did not respond to the start or control request in a timely fashion"

  • Der Dienst startet, aber die JVM beendet sich unverzüglich mit dem Fehlercode 6 (aufgrund des Fehlers, interne DLLs nicht laden zu können).

  • Der Dienst startet, aber die Zuweisung einer Konsole mißlingt.

Jeder Dienst teilt eine bestimmte Speichermenge des internen Desktop-Heap-Bereichs zu, welcher benutzt wird, um Dinge wie API-Elemente etc. zu speichern. Eine detaillierte Beschreibung des internen Desktop Heap Bereichs kann auf einer externen Seite gefunden werden. Wenn der Dienst als ein nicht-interaktiver Dienst auf einem 32-bit Windows XP gestartet wird, beträgt die Standard Heap-Bereichsgröße 512KB. Der Wrapper selbst belegt etwa 10-15 KB für jede Instanz, die gestartet wird. Jede JVM wird auch etwa 20 KB belegen, jedoch kann dieser Wert - abhängig von den API-Elementen, die die JVM lädt - variieren. Wenn der Heap-Bereich bei Dienststart ausgeschöpft ist, können als Folge die obigen Fehler auftreten.

Der Desktop-Heap kann mit dem Desktop Heap Monitor Tool, welches von Microsoft angeboten wird, bestimmt werden. Nachdem dieser installiert und konfiguriert wurde, sollte die Ausgabe wie folgt aussehen:

dheapmon.exe
Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation.  All rights reserved.
-------------------------------------------------------------
  Session ID:    0 Total Desktop: (  5824 KB -    7 desktops)

  WinStation\Desktop            Heap Size(KB)    Used Rate(%)
-------------------------------------------------------------
  WinSta0\Default                    3072              8.2
  WinSta0\Disconnect                   64              4.5
  WinSta0\Winlogon                    128              9.8
  Service-0x0-3e7$\Default            512             28.8
  Service-0x0-3e4$\Default            512              2.1
  Service-0x0-3e5$\Default            512              3.1
  SAWinSta\SADesktop                 1024              0.3
-------------------------------------------------------------

Die nicht-interaktiven Dienste, die als System User ausgeführt werden, gehören in diesem Fall zu Service-0x0-3e7$\Default. Wenn der Start von nicht-interaktiven Diensten (ausgeführt als System User) zunimmt, wird dementsprechend auch die Heap-Nutzung ansteigen. Das Ausführen des Dienstes als interaktiver Dienst hat zur Folge, dass die Nutzung des WinSta0\Default-Heap-Bereichs ansteigt. Das Ausführen des Dienstes mit einem bestimmten Benutzerkonto erstellt eine neue WinStation\Desktop-Sitzung für den Prozess. Jeder Dienst, der von diesem User ausgeführt wird, erhält tatsächlich eine eigene Sitzung.

Es gibt aktuell zwei verfügbare Workarounds:

  • Ausführen mit einem bestimmten Dienst-Benutzerkonto. Jeder Dienst, der ausgeführt wird, erhält eine eigene Sitzung bis 48 MB, die global auf 32-Bit-Maschinen verfügbar ist.

  • Erhöhen Sie den nicht-interaktiven Desktop-Heap-Bereich auf der lokalen Maschine, indem Sie dem folgenden Artikel folgen die Anweisungen auf der Microsoft-Site

Ein 64-Bit Windows hat einen deutlich größeren Desktop-Heap-Bereich und braucht deshalb gleichzeitig viel mehr ausgeführte Dienste, um schlussendlich an seine Grenze zu stossen.