Nous avons récemment rencontré un problème sur notre serveur en direct qui a empêché notre application Web de répondre. Tout ce que nous obtenions, c'était 503 erreurs jusqu'à ce que nous redémarrions le serveur, alors ça allait. Finalement, je l'ai retracé dans le httperr.log et j'ai trouvé beaucoup d'erreurs 1_Connections_Refused.
Une enquête plus approfondie a semblé indiquer que nous avions atteint la limite du pool non paginé. Depuis lors, nous surveillons la mémoire du pool non paginé à l'aide de Poolmon.exe et nous pensons avoir identifié la balise à l'origine du problème.
Tag Type Allocs Frees Diff Bytes Per Alloc
Even Nonp 51,231,806 50,633,533 684,922 32,878,688 48
Si nous utilisons poolmon.exe / g, il affiche le pilote mappé comme [<inconnu> objets d'événement].
Ce n'est pratiquement pas du tout utile. Mon équipe a passé beaucoup de temps à rechercher ce problème et n'a pas été en mesure de trouver un processus pour le réduire à une application ou un service spécifique. J'ai l'impression que la plupart des gens semblent résoudre le problème en tuant les processus sur la machine jusqu'à ce qu'ils voient la mémoire non paginée réinitialisée. Ce n'est pas exactement ce que vous voulez voir lorsque vous travaillez sur une machine de production.
Si j'ouvre le Gestionnaire des tâches et affiche la liste des processus. Je vois MailService.exe avec une valeur de pool NP de 105 Ko, c'est 36 Ko de plus que la valeur du processus indiqué en deuxième. Comme nous avons eu quelques problèmes avec notre serveur de messagerie dans le passé (qui peuvent ou non être liés à ce problème), mon instinct est que cela est à l'origine du problème.
Cependant, avant de quitter le redémarrage des services, j'aimerais avoir un peu plus de certitude qu'un simple «sentiment d'intestin».
J'ai également essayé d'utiliser poolmon.exe / c mais cela renvoie toujours l'erreur:
unable to load msvcr70.dll/msvcp70.dll
et il ne crée pas localtag.txt. Mon collègue a dû télécharger pooltag.txt depuis Internet car nous ne pouvons pas déterminer où il se trouve. Nous n'avons pas de débogueur win ou le DDK win installé (que je peux voir). Peut-être que l'erreur ci-dessus est donnée parce que nous n'avons installé aucun de ceux-ci - mais je ne sais pas.
Enfin j'ai essayé:
C:\windows\system32\driver\findstr /m /l Even *.sys
Cela a renvoyé une liste assez importante de fichiers .sys et encore une fois n'a pas été du tout utile avec le problème à portée de main.
Ma question est donc la suivante: existe-t-il un autre moyen de réduire la cause de cette fuite de mémoire?
MISE À JOUR:
Comme suggéré ci-dessous, j'enregistre les octets non paginés du pool depuis environ un jour pour voir si un processus a tendance à augmenter. Pour la plupart, tous les processus semblent être relativement statiques dans leur utilisation. Deux d'entre eux semblent avoir légèrement augmenté. Je continuerai de surveiller cela pendant les prochains jours.
J'ai également oublié de mentionner plus tôt qu'aucun des processus ne semble utiliser un nombre excessif de poignées non plus.
MISE À JOUR 2:
Je surveille cela depuis quelques semaines. Le pool d'octets non paginés pour les processus individuels et le pool total d'octets non paginés sont restés relativement stables pendant cette période. Pendant ce temps, Windows a été mis à jour et le serveur a redémarré, donc je me demande si cela a résolu le problème. Je ne vois certainement pas la croissance constante du pool d'octets non paginés maintenant que j'étais avant cela.