2009-12-08 19 views
26

¿Existe alguna solución lista para usar para registrar el consumo de memoria desde el inicio del sistema? Me gustaría registrar los datos en un archivo de texto simple o en alguna base de datos para poder analizarlo más tarde.¿Cómo registrar el consumo de memoria en Linux?

Estoy trabajando en el sistema embebido basado en Linux 2.4. Necesito depurar el problema relacionado con el consumo de memoria. Mi aplicación se inicia automáticamente en cada inicio del sistema. Necesito la forma de obtener los datos con marcas de tiempo de intervalos regulares (tan a menudo como sea posible), así puedo rastrear el problema.

Los síntomas de mi problema: cuando el sistema se inicia, lanzó mi aplicación principal y la GUI para visualizar los principales parámetros del sistema. GUI basada en GTK + (servidor X). Si deshabilito la GUI y el servidor X, entonces mi aplicación funciona bien. Si habilito la GUI y el servidor X, no funciona cuando tengo 256 MiB o 512 MiB de memoria física instalada en la placa base. Si tengo 1 GiB de memoria instalada, entonces todo está bien.

+0

Esto es similar a esta pregunta: ¿El http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process – monksy

+0

su aplicación al menos se ejecuta durante algún tiempo antes de estrellarse? –

+0

Sí, las versiones anteriores se ejecutan bien en el mismo sistema. Ahora desarrollamos una nueva versión y comenzamos a abordar este problema. – bialix

Respuesta

23

Un pequeño script como

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

de hecho, esto está muy cerca de lo que necesito. Puedo agregar marcas de tiempo yo mismo. – bialix

+9

'libre -s 1> memory.log'; esto no incurre en los costos de lanzar un nuevo proceso cada segundo.Sin embargo, no tiene marca de tiempo. (Sé que esta es una publicación anterior, pero estaba buscando lo mismo, al igual que otros). –

+1

En algunas versiones gratuitas, es necesario que especifique la cantidad de veces que desea imprimir con -c debido a un error. De lo contrario, muestra el error: segundo argumento '1' falló – Sputnik

2

Se puede poner algo así como

vmstat X >> mylogfile 

en un script de inicio. Como su aplicación ya está en el inicio, puede agregar esta línea al final del script de inicialización que su aplicación ya está usando. (donde X es el número de segundos entre los mensajes de registro)

+0

Gracias por la pista, aunque necesito registrar los datos más a menudo que cada segundo. – bialix

3

Hay un programa llamado

sar 

en sistemas * nix. Podría intentar usar eso para monitorear el uso de la memoria. Toma medidas a intervalos regulares. Haga un

man sar 

para más detalles. Creo que la opción es -r para tomar medidas de memoria, -i para especificar el intervalo que desea.

+1

Definitivamente más potente que las otras soluciones propuestas, aunque un poco más engorroso de configurar. – Ale

4

Creo que la adición de una entrada de crontab será suficiente

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

Hay otras herramientas como SeaLion, New Relic, etc Server Density que casi hacen lo mismo pero son mucho más fáciles de instalar y configurar. Mi favorito es SeaLion, ya que es gratis y también ofrece una impresionante línea de tiempo de los resultados brutos de los comandos comunes de Linux.

+0

+1 para Sealion, el registro/configuración más rápido NUNCA. Todo el asunto, creo, me llevó unos 6 segundos. Escribí mi correo electrónico, una contraseña. Pegué un solo comando en ssh y auge mis estadísticas aparecieron. – rgvcorley

17

El siguiente script imprime marcas de tiempo y un encabezado.

#!/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 

El resultado es el siguiente (probado en Ubuntu 15.04, 64-bit).

 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 
Cuestiones relacionadas