2009-12-08 5 views
26

Existe-t-il une solution prête à l'emploi pour consigner la consommation de mémoire depuis le début du système? Je voudrais enregistrer les données dans un simple fichier texte ou une base de données afin que je puisse l'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 la manière d'obtenir les données avec des horodateurs à intervalles réguliers (aussi souvent que possible), ainsi je peux dépister le problème.Comment enregistrer la consommation de mémoire sous Linux?

Les symptômes de mon problème: lorsque le système démarre, il lance mon application principale et l'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, alors mon application fonctionne bien. Si j'active l'interface graphique et le serveur X, cela ne fonctionne pas quand j'ai 256 Mo ou 512 Mo de mémoire physique installée sur la carte mère. Si j'ai 1 Go de mémoire installée alors tout est OK.

+0

Cela ressemble à cette question: Est-ce que http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process – monksy

+0

votre application fonctionne au moins pendant un certain temps avant de s'écraser? –

+0

Oui, les versions précédentes s'exécutent correctement dans le même système. Maintenant, nous développons une nouvelle version et commençons à résoudre ce problème. – bialix

Répondre

23

Un petit script comme

rm memory.log 
while true; do free >> memory.log; sleep 1; done 
+0

en effet, c'est très proche de ce dont j'ai besoin. Je peux ajouter des horodateurs moi-même. – bialix

+9

'free -s 1> memory.log'; cela n'entraîne pas de coûts de lancement d'un nouveau processus toutes les secondes.Il n'a pas d'horodatage, cependant. (Je sais que c'est un vieux billet, mais je cherchais la même chose, et d'autres aussi). –

+1

Dans certaines versions de free il est nécessaire que vous spécifiez le nombre de fois que vous voulez imprimer avec -c en raison d'un bug. Sinon, il montre l'erreur libre: l'argument secondes '1' a échoué – Sputnik

2

Vous pouvez mettre quelque chose comme

vmstat X >> mylogfile 

dans un script de démarrage. Comme votre application est déjà en cours de démarrage, vous pouvez simplement ajouter cette ligne à la fin du script d'initialisation que votre application utilise déjà. (où X est Nombre de secondes entre les messages du journal)

+0

Merci pour l'indice, bien que je doive enregistrer les données plus souvent que toutes les secondes. – bialix

3

Il y a un programme appelé

sar 

sur les systèmes * nix. Vous pouvez essayer d'utiliser cela pour surveiller l'utilisation de la mémoire. Il prend des mesures à intervalles réguliers. Faire un

man sar 

pour plus de détails. Je pense que l'option -r pour prendre des mesures de mémoire, -i pour spécifier l'intervalle que vous souhaitez.

+1

Certainement plus puissant que les autres solutions proposées, bien qu'un peu plus lourd à mettre en place. – Ale

4

Je pense que vous ajoutez une entrée crontab sera assez

*/5 * * * * free -m >> some_output_file 

Il existe d'autres outils tels que SeaLion, New Relic, Server Density etc qui font presque les mêmes, mais sont beaucoup plus faciles à installer et à configurer. Mon préféré est SeaLion, car il est gratuit et donne également une vue chronologique impressionnante des sorties brutes des commandes Linux courantes.

+0

+1 pour Sealion, l'inscription/configuration la plus rapide JAMAIS. Tout ce que je pense m'a pris environ 6 secondes - j'ai tapé dans mon email, un mot de passe. Collé une seule commande dans ssh et boom mes statistiques sont apparues. – rgvcorley

17

Le script suivant imprime les horodatages et un en-tête. 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 
Questions connexes