2009-06-04 7 views
10

Je comprends que la réponse à cette question peut dépendre des paramètres du registre et de la version de Windows, et peut-être de la quantité de RAM si la mémoire est insuffisante. Par souci de cette question, supposons que le serveur a beaucoup de RAM (3+ GiB).Combien de poignées Windows en cours d'utilisation est "trop ​​nombreuses"?

Si une application (application tierce dans ce cas) fuit des poignées à quelques centaines de minutes, combien de poignées totales cette fuite peut-elle entraîner avant que d'autres applications rencontrent des problèmes? Par "problèmes", je veux dire, par exemple, ne pas démarrer un thread, ne parviennent pas à ouvrir un fichier, et ainsi de suite. J'ai vu certains serveurs (légèrement chargés) fonctionner correctement avec un processus (généralement un processus de base de données) en utilisant quelques dizaines de milliers de handles, donc l'ancienne limite de 10000 handle n'est clairement pas le problème ici. (Et c'était une limite par processus de toute façon, donc n'affecterait pas mon application qui est bien sous ce point.)

Quelqu'un peut soit répondre à la question ou me pointer à quelques ressources qui expliquent combien de total gère un Le serveur Windows vous autorisera avant que vous ne manquiez réellement (de poignées ou d'autres ressources système)?

+1

Cela ressemble plus à un type ServerFault de question peut-être. –

+1

@Matthew Vines: J'ai réfléchi à cela, mais j'ai décidé que je rencontrais ce problème avec un programme que je maintiens, même si une application tierce est celle qui fuit les poignées, qu'elle appartenait au site Web du programmeur. Si j'étais un administrateur essayant de comprendre cela, SF serait plus approprié. – Eddie

Répondre

15

Voir Raymond Chen's post on this topic. Le gestionnaire de fenêtres applique une limite de 10 Ko par processus et une limite totale de 32 Ko sur le système. Donc, si "seulement" fuit 100 poignées par heure, alors vous avez quelques jours de disponibilité avant qu'il ne commence à mal se comporter.

Notez que toutes les poignées ne sont pas égales. Les poignées de fenêtre ne sont pas des poignées de base de données, par exemple, et peuvent suivre des règles différentes. Cette restriction peut donc ne pas s'appliquer, en fonction du type de poignée que le programme fuit. Also read this blog post.

+1

Dans cet article: http://blogs.technet.com/b/markrussinovich/archive/ 2009/09/29/3283844.aspx), il prétend que vous pouvez atteindre jusqu'à 16 millions de poignées par processus. J'ai également remarqué dans Windows XP que deux de mes processus dépassaient la limite de 10 Ko. Je suis confus. – jsirr13

+0

Je suppose que la limite a changé entre-temps, voir aussi la réponse de Thomas Weller. – Liviu

2

Selon this, 10000.

+0

Ce ne sont que des poignées d'objet de fenêtre, et n'affecte pas les autres types de poignées (fichier, événement, mutex, etc.) –

5

Le desktop heap, qui est un pool de mémoire où le «truc» réel du handle représente des vies. Parfois, ce n'est pas tant le nombre de poignées que vous avez allouées mais la quantité de mémoire utilisée par chaque objet sous cette poignée. Vous pouvez déboguer le tas this way. C'est un pain à installer.

(ce qui a été recyclé d'une autre de mes réponses)

+1

L'outil de débogage n'est plus pertinent pour Windows 7 et je suppose plus tard. – AnthonyVO

3

Puisque ces valeurs peuvent changer avec les nouvelles versions de Windows, vous pouvez utiliser l'outil Sysinternals TestLimit/TestLimit64 pour obtenir une estimation approximative. La version x64 peut fonctionner pendant un certain temps, en particulier pour le test de mémoire (il peut utiliser le disque dur (fichier d'échange) pour obtenir plus de mémoire virtuelle).

Obtenez les outils de http://live.sysinternals.com/WindowsInternals/ ou http://download.sysinternals.com/files/TestLimit.zip

options de ligne de commande:

-p check process limit 
-t check thread limit 
-h check handle limit 
-u check user handle limit 
Questions connexes