2009-06-04 14 views
10

Entiendo que la respuesta a esta pregunta puede depender de la configuración del registro y de la versión de Windows, y quizás de la cantidad de RAM si no hay suficiente memoria. Por el bien de esta pregunta, supongamos que el servidor tiene mucha RAM (3+ GiB).¿Cuántas manijas de Windows en uso son "demasiadas"?

Si una aplicación (aplicación de un tercero en este caso) pierde identificadores a unos pocos cientos por hora, ¿cuántos identificadores totales puede tener esa aplicación antes de que otras aplicaciones tengan problemas? Por "problemas" me refiero, por ejemplo, a no iniciar un hilo, no abrir un archivo, y así sucesivamente.

He visto algunos servidores (con poca carga) ejecutarse correctamente con un proceso (generalmente un proceso de base de datos) usando algunas decenas de miles de identificadores, por lo que el límite anterior de 10000 manejos claramente no es el problema aquí. (Y eso fue un límite por proceso de todos modos, por lo que no afectaría a mi aplicación, que está muy por debajo de ese punto.)

¿Alguien puede responder la pregunta o señalarme algunos recursos que explican cuántos asas totales a Servidor Windows permitirá antes de que efectivamente se agote (de controladores u otros recursos del sistema)?

+1

Esto se parece más a un tipo de pregunta ServerFault tal vez. –

+1

@Matthew Vines: Pensé en eso, pero lo decidí desde que encontré este problema con un programa que mantengo, aunque una aplicación de terceros es la que filtra las identificaciones, que pertenecía al sitio web del programador. Si fuera un administrador tratando de resolver esto, SF sería más apropiado. – Eddie

Respuesta

15

Ver Raymond Chen's post on this topic. El administrador de ventanas impone un límite de 10 K por proceso y tiene un límite total de 32 K en todo el sistema. Entonces, si "solo" pierde 100 identificadores por hora, entonces usted tiene unos días de actividad antes de que comience a portarse mal.

Tenga en cuenta que no todos los controladores son iguales. Los identificadores de ventana no son identificadores de DB, por ejemplo, y pueden seguir reglas diferentes. Por lo tanto, esta restricción podría no aplicarse, dependiendo de qué tipo de identificadores está filtrando el programa. Also read this blog post.

+1

En este [artículo] (http://blogs.technet.com/b/markrussinovich/archive/ 2009/09/29/3283844.aspx), afirma que puede alcanzar hasta 16 millones de identificadores por proceso. También me di cuenta en Windows XP que dos de mis procesos excedieron el límite de 10k. Estoy confundido. – jsirr13

+0

Supongo que el límite cambió mientras tanto, también vea la respuesta de Thomas Weller. – Liviu

2

Según this, 10000.

+0

Esos son solo identificadores de objetos de ventana y no afectan a otros tipos de identificadores (archivo, evento, exclusión mutua, etc.) –

5

desktop heap, que es un conjunto de memoria donde vive el "objeto" real que representa el mango. A veces no es tanto la cantidad de identificadores asignados, sino la cantidad de memoria que usa cada objeto con ese identificador. Puede depurar el montón this way. Es un pain para instalar.

(esto fue reciclado de otro de mis respuestas)

+1

La herramienta de depuración ya no es relevante para Windows 7 y supongo que más adelante. – AnthonyVO

3

Dado que estos valores pueden cambiar con las nuevas versiones de Windows, puede utilizar la herramienta SysInternals TestLimit/TestLimit64 para obtener una estimación aproximada. La versión x64 puede ejecutarse por un tiempo, especialmente para la prueba de memoria (puede usar el disco duro (archivo de intercambio) para obtener más memoria virtual).

obtener las herramientas de opciones de línea de http://live.sysinternals.com/WindowsInternals/ o http://download.sysinternals.com/files/TestLimit.zip

de comando:

-p check process limit 
-t check thread limit 
-h check handle limit 
-u check user handle limit 
Cuestiones relacionadas