HowTo: Como investigar y resolver problemas de montón de escritorio en Windows |
||||||||||||
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:
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.
Al ejecutar dheapmon.
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:
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. |