Comment surveiller et enregistrer l'utilisation de la mémoire / CPU des processus dans le temps? [fermé]

30

Je cherche un moyen de diagnostiquer des problèmes, tels que la mort par échange, où un processus de mémoire de ballon remplit l'échange et tue toute la machine (comme Apache).

J'utilise déjà des cactus et je peux configurer des nagios (mais je préfère ne pas le faire) ou des munins, mais pour autant que je sache, ils ne peuvent pas enregistrer l'utilisation des programmes individuels - juste le statut général.

Je sais que je peux rouler un script >> dans un fichier toutes les 30 secondes, mais j'aimerais voir si une solution mature existante existe déjà.

Encore une fois, idéalement, cela:

  • enregistrer l'utilisation de la mémoire des processus toutes les N secondes
  • enregistrer l'utilisation du processeur des processus toutes les N secondes
  • graphiques et historique du support
  • moyennes de support - comme mysqld a utilisé 43% de CPU au cours du dernier jour et en moyenne 400 Mo de mémoire
  • être libre et open source

Les noms des processus ne sont pas et ne devraient pas être connus à l'avance - l'idée est simplement de le laisser surveiller et de jeter un coup d'œil aux principaux délinquants.

Mon système est Linux (OpenSUSE).

Artem Russakovskii
la source
Souhaitez-vous surveiller tout processus susceptible de présenter une fuite de mémoire (les N premiers porcs de mémoire) ou cherchez-vous à surveiller un ensemble défini de processus (par exemple, un serveur Web Apache et un processus Tomcat)? Ce dernier est réalisable avec quelques plugins Nagios ou Cacti simples. Le premier est plus difficile. Vous devriez clarifier cela.
Stefan Lasiewski
Je l'ai déjà clarifié dans le message mais pour clarifier encore: je veux connaître l'état du système quand il tombe en panne en raison de la mort par échange. Je veux savoir qui sont les pires contrevenants. Et btw, cela ne doit pas être une fuite de mémoire - juste un afflux de trafic, ou quoi que ce soit qui provoque une utilisation élevée de la mémoire. Donc, encore une fois, aucune connaissance préalable des noms binaires ne doit être configurée.
Artem Russakovskii
doublon possible - serverfault.com/questions/67234/…
warren
Warren, c'est une question entièrement différente.
Artem Russakovskii
8
Fermer un poste de si bonne qualité était une mauvaise chose, surtout après 4 ans rétroactivement.
peterh dit réintégrer Monica le

Réponses:

16

Si vous ne voulez que les meilleurs délinquants, envisagez de courir topavec un intervalle relativement long (60 secondes et plus) en mode batch. Vous devrez peut-être plus d'une topexécution pour capturer les principaux délinquants sur plusieurs ressources. J'ai configuré des systèmes pour qu'ils fonctionnent toppendant quelques cycles lorsqu'une ressource était surutilisée.

Pensez à exécuter saren mode batch pour capturer l'utilisation des ressources. Je me rends compte que cela est basé sur le serveur, mais il est utile de déterminer les moments où des problèmes se produisent.

Exécutez muninet activez les notifications. Cela peut vous donner une chance d'entrer et de regarder le serveur tomber en panne. Vous pourrez peut-être corriger le problème avant qu'il ne tombe en panne.

Pour les fuites de mémoire, une augmentation constante de l'utilisation du swap indique un problème. Une fois, j'ai vu un serveur mourir lentement pendant plusieurs jours. Le service de problème était un programme surveillant d'autres processus pour les fuites de mémoire. L'administrateur système n'a cessé d'insister sur le fait que l'utilisation croissante des swaps n'était pas un problème, jusqu'à ce que le serveur cesse de répondre.

Vous pouvez constater que cfenginela détection d'anomalie peut être utilisée pour déclencher un script pour capturer l'état du système lorsque les choses tournent mal. Vous voudrez peut-être beaucoup d'informations en plus des processus utilisant le plus de ressources. Pour un afflux soudain d'utilisation, vous souhaiterez peut-être une liste de connexions réseau (par adresse et non par nom). L'utilisation de la mémoire est également utile.

BillThor
la source
12

sysstat est fait à peu près exactement pour votre type d'objectif.

Peter Eisentraut
la source
C'est là que vous devriez commencer. Vous ne pouvez pas savoir par où commencer un examen tant que vous ne savez pas où vous pourriez avoir les meilleures chances. Sysstat est ce que vous recherchez (a également de jolis graphiques). Une fois que vous en saurez plus, utilisez systemtap.
Allen
9

Je l'ai utilisé au sommet avant:

http://freshmeat.net/projects/atop/

"Atop est un moniteur de performances plein écran ASCII qui est capable de signaler l'activité de tous les processus (même si les processus se sont terminés pendant l'intervalle), la journalisation quotidienne du système et l'activité des processus pour une analyse à long terme, mettant en évidence les ressources système surchargées en utilisant couleurs, etc. À intervalles réguliers, il affiche l'activité au niveau du système liée au processeur, à la mémoire, au swap, aux disques et aux couches réseau, et pour chaque processus actif, il montre l'utilisation du processeur, la croissance de la mémoire, la priorité, le nom d'utilisateur, l'état, et quitter le code. "

NinjaCat
la source
au sommet ne semble pas avoir un rapport qui me fournirait ce que je voulais. Corrigez-moi si j'ai tort, s'il-vous plait.
Artem Russakovskii
Il prend en charge vos deux premiers puces (mémoire / CPU par processus). Vous pouvez utiliser la bibliothèque pour rassembler ces statistiques, puis faire votre historique / graphique en fonction des données.
NinjaCat
4
@ artem-russakovskii - Par défaut, atop enregistre les données dans un fichier toutes les dix minutes. Si votre serveur est tombé en panne à 3:45, vous pouvez commencer par dessus atop -r log_filename, appuyez sur mpour basculer vers la vue d'utilisation de la mémoire par processus, puis appuyez sur tpour avancer par incréments de 10 minutes jusqu'à 3:40. Vous pouvez en savoir plus sur les bases de l'utilisation de atop sur lwn.net/Articles/387202 et voir un exemple d'identification d'une fuite de mémoire sur atoptool.nl/download/case_leakage.pdf
sciurus
6

Avez-vous essayé collectd?
C'est très puissant et personnalisable.
A beaucoup de plugins et pourrait être intégré avec nagios.

http://collectd.org/features.shtml

PiL
la source
Collectd est très léger, pas trop difficile à configurer et vous permettra de voir la croissance de la mémoire / swap au fil du temps. Cela ne permettra pas de localiser les processus incriminés, mais vous pourrez peut-être remarquer et rattraper la croissance de la mémoire à temps et inspecter la situation manuellement avec top.
Marius Gedminas
1
Je dois dire que je n'ai pas essayé ce plugin, mais en lisant le manuel du plugin de processus de collectd: "Si les processus sont sélectionnés, les informations suivantes sont collectées. Toutes ces informations sont agrégées par le nom du processus. Sa taille de segment résident, Temps utilisateur et système utilisé, Le nombre de processus portant ce nom, Le nombre de threads (résumés sur tous les processus), Le nombre de défauts de page majeurs et mineurs. Numéros d'E / S approximatifs (octets écrits et lus en raison aux appels système par le processus)
PiL
Vous pouvez sélectionner les processus ou par nom ou par expression régulière.
PiL
2

Centreon au sommet de Nagios, Nagios couplé avec NRPE. Vous pouvez ensuite écrire des scripts personnalisés pour signaler les données dans N'IMPORTE QUEL format que vous souhaitez à NRPE. Nagios interroge ensuite les données des serveurs distants avec NRPE et Centreon fait un joli graphique et ajoute une tonne de flexibilité utilisateur. Nous l'utilisons sur http://beyondhosting.net J'ai déjà un modèle de conteneur VZ avec la configuration centreon + nagios si vous le souhaitez.

Graphes centreon builds hostthenpost.org/tyler/2010-07-23_1719.png

VisBits
la source
Je voudrais une solution prête pour signaler les choses que j'ai mentionnées, surtout les processus consommant le plus de mémoire. Je ne sais pas non plus ce qu'est VZ.
Artem Russakovskii
2

nmon est un excellent outil qui fait ce que vous recherchez. Développé pour AIX et Linux. Produit une tonne de sortie détaillée et facile à mettre dans les rapports. Si vous le recherchez sur Google, il existe un wiki IBM qui contient un tas de documentation et des utilitaires supplémentaires pour analyser les données.

mattcaffeine
la source
2

La densité de serveur fait exactement ce que vous décrivez.

Je l'utilise sur l'un de nos serveurs de production et j'en suis très content. Sa fonctionnalité principale est la possibilité d'afficher des graphiques, de cliquer sur un pic et de voir la consommation CPU / mémoire du serveur à l'heure actuelle, y compris tous les processus en cours d'exécution. Ils appellent cela des instantanés .

Il s'améliore constamment. L'une des dernières fonctionnalités est la détection des anomalies , qui vous permet de détecter facilement les anomalies. Vous pouvez également configurer différents seuils

Aron Rotteveel
la source
1
Ah, j'ai oublié de mentionner la petite partie où je préférerais que ce soit gratuit, et open source, si possible. Plus de 100 $ par serveur n'est pas vraiment ce que je cherche à dépenser (et je n'ai qu'un seul serveur, pas 5). serverdensity.com/pricing
Artem Russakovskii
2

Les réponses suggérées lorsque j'ai posé une question similaire :

Icapan a déclaré :

Munin est le moyen le plus simple d'obtenir des graphiques de disponibilité avec un minimum d'effort lors de l'installation et de la configuration. J'utilise également atop pour une utilisation globale du processeur par un processus, mais ce n'est pas ce que vous avez demandé.

David Spillet a déclaré :

J'utilise collectd pour enregistrer la charge du système parmi un certain nombre d'autres paramètres. Il stocke les données dans les magasins RRD qui peuvent être représentées graphiquement et analysées d'une autre manière à l'aide des nombreux outils et scripts disponibles. J'utilise une version modifiée de ce script pour ma représentation graphique ( exemple de sortie ).

Collectd a des plugins pour surveiller beaucoup de choses (tout ce qui est généralement demandé et quelques choses en haut), et créer le vôtre ne devrait pas être difficile si vous avez besoin de quelque chose de spécialisé, ce qui en fait un outil très flexible. La configuration des graphiques dans rrd.cgi est un processus très manuel, mais pas difficile, bien que vous puissiez très bien trouver un outil plus pratique pour travailler avec les fichiers RRD maintenus par collectd.

Vous pouvez également vérifier Nagios ou OpenNMS .

garenne
la source
1

Munin fera tout ce dont vous avez besoin hors de la boîte sans nécessiter Nagios ou tout autre outil. Des RPM sont disponibles pour OpenSUSE.

gareth_bowles
la source
Le fait-il avec un plugin. Si oui, lequel? Je n'ai pas pu en trouver un qui ne nécessite pas de liste préconfigurée de processus à surveiller.
Artem Russakovskii
Il n'était pas clair d'après votre question initiale que vous ne vouliez pas surveiller une liste préconfigurée de processus - pourriez-vous fournir plus de détails sur vos besoins?
gareth_bowles
Clarification: les noms des processus ne sont pas et ne devraient pas être connus à l'avance - l'idée est de simplement le laisser surveiller et ensuite de jeter un coup d'œil aux principaux délinquants.
Artem Russakovskii
1

Peut-être que le bon vieux OProfile fait ce dont vous avez besoin? Il s'agit d'un profileur de niveau système basé sur le noyau avec seulement une petite surcharge (quelques pourcentages).

Ensuite, il y a un excellent script Perl, PSMon , qui vous permet de configurer toutes sortes de limites CPU / mémoire. Si ceux-ci sont dépassés, psmon enregistrera une erreur et / ou tuera le processus incriminé.

Ce dernier ne produirait aucun rapport de profilage pour vous, mais s'il décide de tuer le même processus encore et encore, vous avez probablement trouvé le salaud méchant que vous recherchiez. :-)

Janne Pikkarainen
la source