[ruby-on-rails] detección de fuga de memoria ruby / ruby on rails



Answers

Un método súper simple para registrar el uso de memoria después o antes de cada solicitud (solo para Linux).

#Put this in applictation_controller.rb
before_filter :log_ram # or use after_filter
def log_ram
  logger.warn 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip
end

Es posible que desee cargar la secuencia de comandos / consola y probar la declaración primero para asegurarse de que funcione en su caja.

puts 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip

Luego solo monitoree la parte superior, cuando una solicitud haga que su uso de memoria salte, vaya a revisar los registros. Esto, por supuesto, solo ayudará si tiene una pérdida de memoria que ocurre en saltos grandes, no pequeños incrementos.

Question

Escribí una pequeña aplicación web que usa ruby ​​on rails, su principal propósito es cargar, almacenar y mostrar resultados de archivos xml (los archivos pueden tener hasta varios MB). Después de correr durante aproximadamente 2 meses, noté que el proceso mongrel usaba aproximadamente 4GB de memoria. Hice algunas investigaciones sobre la depuración de fugas de memoria ruby ​​y no pude encontrar mucho. Entonces tengo dos preguntas.

  • ¿Hay alguna buena herramienta que se pueda usar para encontrar fugas de memoria en Ruby / rails?
  • ¿Qué tipo de patrones de codificación causan filtraciones de memoria en ruby?



Ahora puede ejecutar lo siguiente para obtener la memoria en un formato que R pueda leer. Supongo que su línea de registro se ve así:

1234567890 RAM USAGE: 27456K

Ejecuta esto (o modifica al conjunto):

$ grep 'RAM USAGE' fubar.log | awk '{print s " " $1 " " $4; s++}' | sed 's/K//g' > mem.log

Entonces puedes ejecutar esto:

#!/bin/sh
rm -f mem.png
R --vanilla --no-save --slave <<RSCRIPT
    lst <- read.table("mem.log")
    attach(lst)
    m = memory / 1024.0
    summary(m)
    png(filename="mem.png", width=1024)
    plot(date, m, type='l', main="Memory usage", xlab="time", ylab="memory")
RSCRIPT

y consigue un buen gráfico.







Related