ruby-on-rails ruby memory-leaks

ruby on rails - ¿Por qué los perfiles de memoria en rubí son tan difíciles?



ruby-on-rails memory-leaks (3)

O más bien, ¿por qué no hay mejores herramientas para perfilar la memoria en ruby, específicamente aplicaciones de rieles?

Recientemente nuestra aplicación de rieles (alojada en heroku) ha comenzado a ver muchos errores R14 en los dineros de los trabajadores. Esto significa que nos estamos quedando sin memoria. Alterar los dineros a 2x (512mb -> 1GB) solo alivia el problema temporalmente, lo que me lleva a pensar que hay una pérdida de memoria en alguna parte. Naturalmente, mi próximo paso fue encontrar una buena gema de perfil que me pueda ayudar a descubrir la fuente de la fuga.

Tal vez estoy ignorante de las herramientas disponibles, o tal vez simplemente no sé cómo usar las que tengo. Mi deseo es que pueda instalar una gema y luego ejecutar informes sobre las estadísticas de uso de la memoria. Golpear un punto final para obtener un informe no es realmente viable, ya que mis problemas de memoria están aislados de las dinámicas de los trabajadores que ejecutan trabajos retrasados.

Miré a memprof , pero solo es 1.8.

Miré ruby-prof (impresionante), pero el perfil de memoria requiere un parche de rubí.

He visto GC :: Profiler , pero no entiendo cómo encontrar pérdidas de memoria con él.

Entonces, ¿es simplemente difícil encontrar pérdidas de memoria en ruby? O me estoy perdiendo el punto de alguna manera?



Dependiendo de su "tipo" de fuga, puede ejecutar valgrind contra ruby. Sin embargo, podría requerir una recompilación nuevamente. En general, es difícil porque ruby ​​asigna el método sin disparar ningún evento, por defecto, por lo que es complicado hacer un seguimiento. Consulte también proyecto perftools.rb , que en cierto modo funciona en torno a esta limitación.


Recientemente he tenido cierto éxito con Skylight para perfilar los métodos web y de trabajadores en segundo plano y luego buscar oportunidades para la optimización. Probablemente no existía cuando publicaste esta pregunta. La desventaja es que realmente solo te ayuda a depurar en escenarios o producción, no en entornos de desarrollo, por lo que el ciclo de desarrollo puede ser muy lento.

Asegúrese de instalar tanto tragaluz-rubí como tragaluz sidekiq para obtener un perfil en su servidor web y en sus trabajadores de fondo si está utilizando Sidekiq.

¡Buena suerte!