web-dev-qa-db-fra.com

Comment enregistrer la consommation de mémoire sous Linux?

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. 

33
bialix

Un petit script comme

rm memory.log
while true; do free >> memory.log; sleep 1; done
30
Gunther Piez

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
20
klaus se

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.

4
Classified

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. 

4
stylusbrook

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à .

2
Steve B.

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.

0
bob0007