HowTo : Comment analyser et résoudre les problèmes de tas de bureau Windows

Compatibilité :1.0.0
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Lors de l'installation et du démarrage de plusieurs services sous Windows, vous pouvez rencontrer un problème où il n'est plus possible de démarrer des services supplémentaires.

Chaque service alloue une certaine quantité de mémoire à partir de l'espace interne du tas de bureau utilisé pour stocker des éléments tels que les fenêtres, les polices, les éléments d'API, etc. Lorsque ce tas de bureau est épuisé, les appels système user32 commenceront à échouer. Malheureusement, il n'est actuellement pas possible d'interroger le système Windows pour connaître à l'avance la quantité d'espace de tas de bureau disponible. Lorsque le tas de bureau disponible pour le processus Wrapper est épuisé, vous rencontrerez très probablement l'une des erreurs suivantes :

  • La tentative de démarrage d'un service entraîne immédiatement un dépassement de délai du Gestionnaire de services avec l'erreur suivante :

    Error 1053: The service did not respond to the start or control request in a timely fashion
    
  • Le service démarre, mais la JVM ne parvient pas à se lancer complètement et se termine avec le code 6. Le fichier wrapper.log contiendra généralement une erreur comme la suivante :

    STATUS | wrapper  | 2011/08/31 16:54:53 | Launching a JVM...
    INFO   | jvm 1    | 2011/08/31 16:54:54 | Error loading: C:\Sun\jdk1.6.0_24\jre\bin\server\jvm.dll
    ERROR  | wrapper  | 2011/08/31 16:54:54 | JVM exited while loading the application.
    
  • Le service démarre, mais ne parvient pas à allouer une console.

Une description détaillée du tas de bureau interne se trouve sur le site externe. Si le service est lancé en tant que service non interactif, sur un système Windows XP 32 bits, l'espace de tas par défaut est de 512 Ko, mais cela varie considérablement selon la version spécifique de Windows que vous utilisez. Le Wrapper lui-même alloue entre 10 et 15 Ko pour chaque instance. Cependant, la JVM lancée alloue également au moins 20 Ko. La valeur exacte varie selon ce que fait l'application Java en cours d'exécution. Si l'espace de tas est épuisé pendant le chargement du processus Wrapper, vous obtiendrez le délai d'attente décrit ci-dessus. S'il est épuisé pendant le chargement de la JVM, vous verrez alors l'un des autres problèmes.

Au moment de la rédaction de cet article, nous n'avons pas trouvé de moyen permettant au Wrapper d'interroger Windows sur la quantité de tas de bureau restante. Il est possible de surveiller et de diagnostiquer l'utilisation du tas de bureau à l'aide de l'outil « Desktop Heap Monitor » fourni par Microsoft. Cet outil fonctionne en s'exécutant comme un pilote de niveau noyau, ce qui nécessite un niveau d'accès que nous ne souhaitons pas imposer au Wrapper.

Veuillez lire les instructions sur le site Microsoft concernant l'utilisation de dheapmon.exe. Les étapes de base sont les suivantes :

  • Le Desktop Heap Monitor nécessite l'accès aux symboles système de Windows pour fonctionner. Dans la plupart des cas, le plus simple est d'accéder au serveur de symboles de Microsoft.

    dheapinst.exe -y srv*http://msdl.microsoft.com/download/symbols
    
  • Ensuite, il est nécessaire de charger le pilote noyau du Desktop Heap Monitor.

    dheapmon.exe -l
    
  • Enfin, exécutez-le pour collecter l'état actuel de tous les tas de bureau.

    dheapmon.exe
    

Lorsque dheapmon.exe est exécuté, vous devriez voir quelque chose comme ce qui suit :

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
-------------------------------------------------------------

Dans l'exemple ci-dessus, le Wrapper s'exécute en tant que service non interactif, sous l'utilisateur System, dans Service-0x0-3e7$\Default. Le démarrage de services non interactifs supplémentaires en tant qu'utilisateur System par défaut augmentera l'utilisation du tas de ce bureau en conséquence.

L'exécution du service en tant que service interactif entraînera une augmentation de l'utilisation de l'espace de tas de WinSta0\Default.

L'exécution du service sous un compte utilisateur donné créera une nouvelle session WinStation\Desktop pour chaque service individuel.

Il existe actuellement 2 solutions de contournement :

  • Exécuter sous un compte utilisateur de service spécifique avec la propriété wrapper.ntservice.account. Chaque service aura son propre bureau et son propre tas de bureau. Cela vous permettra d'exécuter davantage de services, mais chaque service nécessitera plus de tas de bureau que lorsqu'ils s'exécutent ensemble dans le même bureau. Une fois que le total de tous les tas de bureau atteint la taille de l'Session View Space, des problèmes de ressources se reproduiront. Pour Windows XP et les versions plus récentes de Windows, la taille par défaut totale de l'Session View Space est de 48 Mo. Elle peut être augmentée par une modification du registre.

  • Il est possible d'augmenter l'espace de tas de bureau non interactif en modifiant le registre comme décrit dans les instructions sur le site Microsoft. Comme toujours, soyez très prudent lorsque vous modifiez votre registre.

Les versions 64 bits de Windows ont des tailles de tas de bureau par défaut beaucoup plus importantes, il est donc beaucoup moins probable que vous rencontriez des problèmes sur ces systèmes.