Salut,
Je soupçonne un process d'avoir une fuite de mémoire, vu que j'ai un crash au bout d'un temps long.
Est-ce qu'il y a des outils simples capables de monitorer et sauvegarder la conso d'un process ?
Ou est-ce qu'il vaut mieux que je bricole un truc à coup de top -b | awk > log
et plotter log avec gnuplot demain matin lorsque ça aura crashé dans la nuit ?
Merci d'avance
# man proc
Posté par jben . Évalué à 2.
Dans le pseudo système monté sur /proc tu as des infos sur les processus. En particulier, un
cat /proc/<pid>/status
, les champsVm.*
commeVmSize
, devrait pouvoir t'interesser.Après peut-être qu'il existe des outils simples, mais en même temps c'est 3 lignes de shell à faire.
# valgrind
Posté par symoon . Évalué à 3.
Valgrind est un outil d'analyse permettant de détecter et localiser les fuites mémoire.
En revanche, il vaut mieux que les symboles de debug soient encore dans le binaire.
# idées
Posté par Krunch (site web personnel) . Évalué à 2.
Ça veut dire quoi « un crash » ? L'OOM tue le process ? Il y a un segfault ? Un abort() ? …
Si une fuite est suspectée, plotter top/ps/proc est effectivement un bon début. Si tu plottes aussi /proc/$pid/maps tu peux commencer à voir plus précisement ce qui fuite à l'intérieur du process (probablement le tas).
S'il s'agit bien d'une fuite sur le tas, il y a plusieurs approches. Si Valgrind est une option, c'est sans doute le moyen le plus rapide de trouver la source du problème mais selon le programme concerné, ça n'est pas forcément faisable.
Une alternative est d'instrumenter le programme en hookant ou wrappant malloc/free « manuellement ».
Une autre approche assez barbare mais qui fonctionne parfois fort bien est d'attacher un debugger (ou dumper un core) et d'examiner des bouts de mémoire plus ou moins au hasard jusqu'à reconnaitre un motif évident.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.