ruby on rails - deploy - Modrails: procesos de ruby rogue que consumen 100% de CPU.
passenger start (4)
Este es un problema recurrente con el pasajero. He visto este problema muchas veces ayudando a personas que corrían Ruby en rieles con un pasajero. No tengo una solución, pero es posible que desee probar esto http://www.modrails.com/documentation/Users%20guide%20Apache.html#debugging_frozen
Estoy haciendo que las instancias de Ruby de mod_rails se vuelvan "deshonestas": estos procesos ya no aparecen en el estado de pasajero y utilizan 100% de CPU.
Aparte de instalar god / monit para matar la instancia, ¿alguien puede darme algún consejo sobre cómo prevenir esto? No he podido encontrar nada en los registros que ayude.
Si está usando Linux, puede instalar la utilidad "strace" para ver qué está haciendo el proceso de Ruby que consume toda la CPU. Eso te dará una buena vista de bajo nivel. Debería estar disponible en su gestor de paquetes. Entonces tú puedes:
$ sudo strace -p 22710
Process 22710 attached - interrupt to quit
...lots of stuff...
(press Ctrl+C)
Luego, si desea detener el proceso en el medio y volcar un seguimiento de pila, puede seguir la guía sobre el uso de GDB en Ruby en http://eigenclass.org/hiki.rb?ruby+live+process+introspection , específicamente obra:
gdb --pid=(ruby process)
session-ruby
stdout_redirect
(in other terminal) tail -f /tmp/ruby_debug.(pid)
eval "caller"
También puede usar la Ruby-debug Gem para conectarse remotamente a los sockets de depuración que abre, como se describe en http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger
También parece haber un proyecto en Github relacionado con la depuración de instancias de Passenger que parece interesante, pero falta la documentación: http://github.com/ddollar/socket-debugger/tree/master
Tuve un proceso de ruby ​​relacionado con Phusion Passenger, que consumía mucha CPU, aunque debería haber estado inactivo.
El problema desapareció después de que corrí
date -s "`date`"
como se sugiere en este hilo . (Eso fue en Debian Squeeze)
Aparentemente, el problema estaba relacionado con un segundo de un salto, y podría afectar a muchas otras aplicaciones como MySQL, Java, etc. Más información en este hilo en lklm .
Vimos algo similar a esto con consultas de SQL muy largas.
MySQL eliminaría las consultas porque excedían el límite de ejecución prolongada y el hilo nunca se dio cuenta de que la consulta estaba muerta.
Es posible que desee comprobar los registros de la base de datos.