resultó que nuestro problema fue causado por tener nuestra propia costumbre Resque.before_fork
y Resque.after_fork
manipuladores.
La gema de RPM de NewRelic configurará automáticamente los ganchos con Resque.before_fork
y Resque.after_fork
para establecer un canal de comunicación para los trabajadores. Como limitación de Resque, solo ejecuta el último bloque/Proc asignado a los ganchos before_fork y after_fork. Por lo tanto, si tiene sus propios ganchos custom_fork/after_fork, * debe * configurar manualmente el canal de comunicación del agente, p. en un archivo de configuración/inicializadores/custom_resque.rb:
Resque.before_fork do |job|
NewRelic::Agent.register_report_channel(job.object_id)
# extra custom stuff here
end
Resque.after_fork do |job|
NewRelic::Agent.after_fork(:report_to_channel => job.object_id)
# extra custom stuff here
end
Este código se toma directamente del archivo de la gema RPM gems/newrelic_rpm-3.5.0/lib/new_relic/agent/instrumentation/resque.rb
actualización de errores RPM 27/12/2012: Después de implementar la técnica anterior, descubrimos que la gema RPM pierde identificadores de archivo cuando se usa en modo bifurcado (por ejemplo, Resque). Observamos mensajes de error del tipo ActiveRecord::StatementInvalid: ArgumentError: too large fdsets: SET client_min_messages TO ''
. Después de una gran cantidad de búsquedas descubrimos que estas son causadas cuando ActiveRecord intenta abrir una conexión de base de datos y no puede porque la cantidad de descriptores de archivos está agotada. New Relic confirmó que hay un error en el agente al probar el plan de explicación. Esto ocurre cuando se ejecutan muchos trabajos de Resque que se conectan a la base de datos.
actualización 01/28/2013 Bug: Después de mucho rascarse la cabeza nos dimos cuenta de que este error se debe a una interacción no soportada con la gema resque-lonely_job que utiliza before_perform
gancho de Resque que pueden detener un trabajo Resque con una excepción Resque::Job::DontPerform
. El cliente RPM no se limpia correctamente en esta situación y filtra los descriptores de archivos. New Relic ha sido informado y está trabajando en una solución.
Actualización de error 4/10/2013: Ha solucionado el problema. Estamos usando 3.6.0.78 y maneja este caso. ¡No más filtraciones de descriptores de archivos! Gracias Nueva Reliquia.
En los registros de sus trabajadores de Resque, ¿ve el agente newrelic conectado? – jakeonrails