HowTo: Como investigar y resolver problemas de montón de escritorio en Windows

Compatibilidad :1.0.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSX (No Compatible)Linux (No Compatible)IBM AIX (No Compatible)FreeBSD (No Compatible)HP-UX (No Compatible)Solaris (No Compatible)IBM z/Linux (No Compatible)

Al instalar e iniciar varios servicios en Windows, puede encontrar un problema en que ya no es posible iniciar servicios adicionales.

Cada servicio asigna una cierta cantidad de memoria del espacio de almacenamiento dinámico interno del escritorio utilizado para almacenar cosas como ventanas, fuentes, elementos API, etc. Cuando este montón de escritorio se agota, las llamadas del user32 del sistema empiezan a fallar. Desafortunadamente, actualmente no es posible consultar al sistema de Windows la cantidad de espacio disponible en el escritorio de antemano. Cuando se agota el montón de escritorio disponible para el proceso del Wrapper, lo más probable es que encuentre uno de los siguientes errores:

  • Al intentar iniciar un servicio hace que el Administrador de Servicios expire inmediatamente con el siguiente error:

    Error 1053: The service did not respond to the start or control request in a timely fashion
    
  • El servicio inicia, pero la máquina JVM no se inicia por completo y sale con el código 6. El archivo wrapper.log generalmente contendrá un error como el siguiente:

    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.
    
  • El servicio se inicia, pero no puede asignar una consola.

Puede encontrar una descripción detallada del montón de escritorio interno en el sitio externo. Si el servicio se lanza como un servicio no interactivo en un sistema Windows XP 32 bits, el espacio del montón de escritorio por defecto es 512 KB, pero esto varía mucho dependiendo de la versión específica de Windows que esté ejecutando. El Wrapper en sí asigna entre 10 y 15 KB para cada instancia. Sin embargo, la máquina JVM que se lanza también asigna al menos 20 KB. El valor exacto varía según lo que esté haciendo la aplicación Java que se está ejecutando. Si el espacio del montón de escritorio se agota mientras el proceso de Wrapper se carga, obtendrá el tiempo de espera descrito anteriormente. Si se agota mientras se carga la JVM, verá uno de los otros problemas.

Al momento de escribir este artículo, no hemos podido encontrar una manera para que el Wrapper consulte a Windows la cantidad de almacenamiento dinámico de escritorio restante. Es posible monitorear y diagnosticar el uso del montón de escritorio usando la herramienta "Desktop Heap Monitor" proporcionada por Microsoft. Esta herramienta funciona ejecutándose como un controlador de nivel Kernel, lo que requiere un nivel de acceso que no deseamos que el Wrapper tenga.

Por favor, lea las instrucciones en el sitio de Microsoft sobre el uso de dheapmon.exe. Los pasos básicos son los siguientes:

  • Desktop Heap Monitor requiere acceso a los símbolos del sistema de Windows para funcionar. En la mayoría de los casos, lo más fácil es acceder al servidor de símbolos de Microsoft.

    dheapinst.exe -y srv*http://msdl.microsoft.com/download/symbols
    
  • Después, es necesario cargar el Controlador de kernel de Desktop Heap Monitor.

    dheapmon.exe -l
    
  • Finalmente, ejecute para recopilar el estado actual de todos los montones de escritorio.

    dheapmon.exe
    

Al ejecutar dheapmon.exe, verá algo como no siguiente:

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

En el ejemplo anterior, el Wrapper se ejecuta como un servicio no interactivo, por el usuario "System", en Service-0x0-3e7$\Default. Iniciar servicios no interactivos adicionales como el usuario System predeterminado aumentará el uso del montón de este escritorio en consecuencia.

Ejecutar el servicio como un servicio interactivo hará con que el espacio de uso del montón de WinSta0\Default aumente.

La ejecución del Servicio con una determinada cuenta de usuario creará una nueva sesión WinStation\Desktop para cada servicio individual.

Hay 2 soluciones disponibles actualmente:

  • Ejecutar como una cuenta de usuario de servicio específica con la propiedad wrapper.ntservice.account. Cada servicio tendrá su propio escritorio y éste su montón de escritorio. Esto le permitirá ejecutar más servicios, pero cada servicio requerirá más montón de escritorio que como si se ejecutaran juntos en el mismo escritorio. Una vez que el total de todos los montones de escritorios llegue al tamaño de Session View Space, problemas de recursos volverán a suceder. Para Windows XP y versiones más recientes de Windows, el tamaño del total predeterminado de Session View Space es 48 MB. Se puede aumentar con un cambio de registro.

  • Es posible aumentar el espacio de almacenamiento dinámico de escritorio no interactivo editando el registro como se describe en las instrucciones en el sitio de Microsoft. Como siempre, tenga mucho cuidado al modificar su registro.

Las versiones de Windows de 64 bits tienen tamaños de almacenamiento dinámico de escritorio predeterminados mucho más grandes, por lo que es mucho menos probable que encuentre problemas en estos sistemas.