Existe-t-il une solution prête à l’emploi pour enregistrer la consommation de mémoire depuis le début du système? J'aimerais enregistrer les données dans un simple fichier texte ou dans une base de données afin de pouvoir les analyser plus tard.
Je travaille sur un système embarqué basé sur Linux 2.4. J'ai besoin de déboguer le problème lié à la consommation de mémoire. Mon application démarre automatiquement à chaque démarrage du système. J'ai besoin de pouvoir obtenir les données avec des horodatages à intervalles réguliers (aussi souvent que possible), afin de pouvoir localiser le problème.
Les symptômes de mon problème: au démarrage du système, il a lancé mon application principale et mon interface graphique pour visualiser les principaux paramètres du système. Interface graphique basée sur GTK + (serveur X). Si je désactive l'interface graphique et le serveur X, mon application fonctionne correctement. Si j'active l'interface graphique et le serveur X, cela ne fonctionnera pas si j'ai 256 ou 512 Mo de mémoire physique installée sur la carte mère. Si j'ai 1 GiB de mémoire installé, tout est OK.
Un petit script comme
rm memory.log
while true; do free >> memory.log; sleep 1; done
Le script suivant imprime des horodatages et un en-tête.
#!/bin/bash -e
echo " date time $(free -m | grep total | sed -E 's/^ (.*)/\1/g')"
while true; do
echo "$(date '+%Y-%m-%d %H:%M:%S') $(free -m | grep Mem: | sed 's/Mem://g')"
sleep 1
done
La sortie ressemble à ceci (testé sur Ubuntu 15.04, 64 bits).
date time total used free shared buffers cached
2015-08-01 13:57:27 24002 13283 10718 522 693 2308
2015-08-01 13:57:28 24002 13321 10680 522 693 2308
2015-08-01 13:57:29 24002 13355 10646 522 693 2308
2015-08-01 13:57:30 24002 13353 10648 522 693 2308
Il y a un programme appelé
sar
sur les systèmes * nix. Vous pouvez essayer de l'utiliser pour surveiller l'utilisation de la mémoire. Il prend des mesures à intervalles réguliers. Fait une
man sar
pour plus de détails. Je pense que l'option est -r pour prendre des mesures en mémoire, -i pour spécifier l'intervalle que vous souhaitez.
Je pense que l'ajout d'une entrée crontab suffira
*/5 * * * * free -m >> some_output_file
Il existe d'autres outils tels que SeaLion , New Relic , Server Density etc qui feront presque de même, mais sont beaucoup plus faciles à installer et à configurer. Mon préféré est SeaLion, car il est gratuit et offre une vue chronologique impressionnante des sorties brutes des commandes linux courantes.
Vous pourriez mettre quelque chose comme
vmstat X >> mylogfile
dans un script de démarrage. Puisque votre application est déjà au démarrage, vous pouvez simplement ajouter cette ligne à la fin du script d'initialisation que votre application utilise déjà .
Je suis un grand fan de la journalisation de tout et je trouve utile de savoir quels processus utilisent la mémoire et combien chaque processus utilise (ainsi que des statistiques récapitulatives). La commande suivante enregistre une impression supérieure commandée par la consommation de mémoire toutes les 0,5 seconde:
top -bd0.5 -o +%MEM > memory.log
Notez simplement que le fichier journal augmentera beaucoup plus rapidement que si vous ne stockiez que les statistiques d'utilisation totale de la mémoire, assurez-vous de ne pas manquer d'espace disque.