J'ai un problème étrange créant de nouveaux compteurs dans le groupe existant. J'ai un service Windows, qui fait du travail et permettez-moi de surveiller son état via un compteur de performance. J'ai un groupe de comptoirs de performance et des compteurs de performance. Le groupe est créé lors de la phase d'installation de service (avec privilèges d'administrateur) et les compteurs sont initialisés lorsque le service commence (en tant qu'utilisateur localysem). Tout fonctionne bien, il existe également le groupe existant, je peux aussi les surveiller et écrire sur le journal des compteurs de performance. Le service est en cours d'exécution.
Ensuite, je veux ajouter quelques comptoirs de performance. Je les ajoute dans le code de service, reconstruire et déployer sur Server en désinstallant une instance de service précédente (le groupe Performance Counters est supprimé par le code de désinstallation) et installer le service à nouveau (le groupe Performance Counters est créé pendant la phase d'installation avec tous les nouveaux comptoirs). Ensuite, je commence le service. P>
C'est la partie commune, une partie inintéressante de l'histoire. Les choses étranges commencent ici. P>
Je vais à Permon, ajoutez tous les compteurs à la vue Moniteur système. Je peux voir mon groupe de comptoirs de performance, je vois tous les compteurs de performance, y compris de nouveaux compteurs de performance que je viens d'ajouter. Je peux les ajouter à la vue Moniteur système. Et je peux voir que les vieux compteurs fonctionnent. Mais de nouveaux compteurs ne fonctionnent pas, ils ne collectent aucune donnée. Eh bien, d'accord, il y avait peut-être mon erreur, je passe à la vue de compte et essayez de vous connecter les données de la performance. Les anciens comptoirs sont connectés comme ils se sont connectés auparavant. Mais quand j'essaie d'ajouter un nouveau compteur, je trouve dans la visionneuse d'événements suivant l'avertissement: P>
Le service n'a pas pu ajouter le compteur '\ Agent \ myCounterSgroupname \ myNewCounter' au journal ou alerte NewcounterSlog. Ce journal ou votre alerte continuera, mais les données de ce compteur ne seront pas collectées. L'erreur renvoyée est la suivante: le compteur spécifié n'a pas pu être trouvé. P> BlockQuote>
J'ai essayé de réinstaller le service, supprimez les anciens comptoirs, les ajoutez à nouveau et rien n'a changé. Les vieux compteurs travaillent et de nouveaux compteurs ne fonctionnent pas. Ensuite, je redémarre Windows et de nouveaux compteurs ont commencé à travailler! Rien n'a changé en service, je viens de redémarrer le serveur. J'ai rencontré ce problème sur 2 serveurs, les deux fonctionnent sous Windows Server 2003 SP1. Le code de tous les compteurs de performance est identique, car je les crée à l'aide de code avec des génériques. P>
Vous pouvez dire "Hey, ne vous inquiétez pas, redémarrez vos fenêtres à chaque fois que vous devez ajouter de nouveaux compteurs de performance ", mais je ne peux pas. Mon service est en cours d'exécution sur le serveur avec d'autres services, et nous avons besoin de ces services fonctionnent constamment, nous ne pouvons pas redémarrer le serveur à chaque fois que je change un service. P>
Canon peut aider avec ce problème? P>
mise à jour: strong> On dirait qu'il y a le problème similaire: https://stackoverflow.com/questions/2180005/Adding -Performance-comptoirs-to-existant-catégorie p>
mise à jour forte> Je ne pense pas que le problème est dans mon code, mais si cela aide je le poster ici. P> code à installer et à désinstaller (appelé pendant la phase d'installation): performancecountersmanagerbase.getcreationData () est une enveloppe générique pour obtenir la collecte de données pour créer des compteurs de performance. em> p>
public static PerformanceCounterInstaller GetInstaller() { PerformanceCounterGroupAttribute group = PerformanceCountersManagerBase.ExtractGroupSettings(typeof(TManager)); PerformanceCounterInstaller installer = new PerformanceCounterInstaller(); installer.CategoryName = group.Name; installer.CategoryHelp = group.Description; installer.CategoryType = PerformanceCounterCategoryType.SingleInstance; installer.UninstallAction = UninstallAction.Remove; installer.Counters.AddRange(PerformanceCountersManagerBase.GetCreationData<TManager>().ToArray()); return installer; }
3 Réponses :
Les compteurs PERM sont basés sur des segments de mémoire partagés. J'ai vu des problèmes similaires lorsque quelqu'un a toujours une poignée au segment de mémoire partagée. Cela peut inclure l'outil Perfmon lui-même. Vous pourrez peut-être utiliser l'utilitaire de la poignée pour voir qui tient la mémoire partagée. Vous ne devriez pas avoir besoin de redémarrer, alors essayez de voir si ce problème vous éloigne d'abord de vous enfermer, puis de recréer les comptoirs. Assurez-vous également que votre service ne fonctionne pas. P>
Christ Sweet! Merci beaucoup! Je ne veux même pas vous dire combien de temps j'ai passé à ce sujet avant de trouver cette réponse. En fin de compte, je devais fermer Perfmon, fermez la session PowerShell accédant au comptoir, arrêtez une application Web dans IIS et recycler l'AppPool! Rien n'a travaillé avant d'avoir fait chacune de ces choses.
Avant la réponse de Mike j'ai géré le problème moi-même. Mais je n'ai pas le temps de comprendre la cause du problème. J'ai résolu le problème en effectuant les étapes suivantes: P>
Après ces étapes, de nouveaux compteurs de performance sont apparus comme ils le devraient. Peut-être qu'il n'est pas nécessaire d'arrêter de se connecter, mais je n'ai pas le temps de vérifier le moment. Je vais l'essayer plus tard. J'accepte la réponse de Mike aussi correcte car elle pointe sur la cause du problème. P>
J'ai eu un cas similaire où j'ai créé des comptoirs de performance pour différents segments de mon système et les ajoutez à un dictionnaire pour un accès direct par nom, et ils ont tous écrit un à tous (tout incrément sur l'un d'entre eux mettrait à jour le repos). p>
Pour ma surprise, la solution était de fermer forte> l'outil Windows strong> Windows, puis créez les comptoirs. Le problème était une mémoire partagée utilisée qui était verrouillée. P>
Pourriez-vous publier le code qui installe les comptoirs et le code qui les met à jour?
J'attendais que votre logique d'installation utilisait
performancecounterinstaller code>. Pourquoi est-ce que vous n'utilisez pas cela? J'utilise cela pour un scénario très similaire et ça marche bien.HM, j'ai raté cette classe en lisant des compteurs de performance. Je vais l'essayer lundi, peut-être qu'il sera en mesure d'installer correctement des compteurs. Merci du conseil. Je vais faire rapport sur les résultats.
J'ai donc changé la logique d'installation pour utiliser PerformanceCounterInstaller mais rien n'a changé. Installer ajoute de nouveaux compteurs, mais ils ne sont pas installés correctement :(
Je sais que c'est un ancien post mais je semble rencontrer le même problème. Avez-vous déjà résolu votre problème?
@James s'il vous plaît voir les réponses dans ce post. Il y a au moins une réponse de Mike, puis une autre par moi. Ils pointent tous sur la solution.