Mayor actividad del proceso en reposo después de la actualización

Hola,

Después de actualizar Discourse a la versión v2.5.0.beta4-399-gbf8085e436 (desde una versión 2.4.x, usando el arranque por línea de comandos de discourse_docker desde git, justo antes de los commits de actualización a Postgres 12), hay notablemente más actividad de CPU en el servidor (incluso si nadie está conectado).

“top” indica que varios procesos “ruby” están activos con bastante frecuencia. He entendido que se trata de los workers de unicorn y sidekiq. Al ejecutar redis-cli monitor, veo que realizan solicitudes BRPOP bloqueantes con un tiempo de espera de 2 segundos para comprobar si hay trabajo que hacer. Esto equivale a una docena de comandos de Redis por segundo. Además, se actualizan estadísticas cada 5 segundos. Al ejecutar redis-cli info stats, se indica que se procesan en promedio entre 15 y 20 comandos por segundo.

No sé si esta actividad puede llegar a generar el 2-4% de utilización de CPU que observamos. Con la versión anterior, era inferior al 0,5%. En aquel momento no revisé las mismas estadísticas de redis-cli.

Me gustaría probar con un tiempo de espera más largo para ver si eso ayuda, pero aún no he logrado averiguar cómo hacerlo.

Hmm, ¿esto estaría relacionado con tu trabajo, @eviltrout?

¿En qué trabajo estabas pensando? No creo que nada en lo que haya trabajado recientemente sea probable que cause esto.

Mi culpa, estaba pensando en ember-cli

Consulta forum.example.com/sidekiq: es posible que haya trabajos de reprocesamiento en segundo plano en curso después de la actualización.

1 me gusta

Es altamente improbable que haya tocado Redis. Nunca digo nunca porque ya me ha pasado antes, pero sospecho que se trata de otra cosa :slight_smile:

1 me gusta

Buena pista. No vi nada alarmante allí, no había trabajos ejecutándose y ninguno con una ejecución prolongada (solo unos pocos por encima de 100 ms). El panel indica aproximadamente 1000 procesados por día, igual que antes de la actualización.

Probablemente fuera de tema, pero también es interesante el gráfico de procesados en 6 meses; parece que hay dos mesetas (una el doble de alta que la otra) entre las que alterna con semanas de diferencia. No parece correlacionarse con reinicios (y tampoco actualizamos esto en ese período).

¿Hay alguna forma sencilla de cambiar ese tiempo de espera de 2 s para BRPOP? No lo encontré en el código. Al menos indicaría si los bucles de sondeo de trabajo son el problema.

Estas son las cosas que a veces veo en top:

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                     
   1024 discour+  20   0  333584 202888  21660 S   1.3   2.5   3:35.81 ruby                                                                        
   1156 discour+  20   0  715904 249416  24532 S   1.3   3.1   3:26.50 ruby                                                                        
   1178 discour+  20   0  726664 251468  24564 S   1.3   3.1   3:26.11 ruby                                                                        
   1189 discour+  20   0  714368 247912  24444 S   1.3   3.1   3:24.56 ruby                                                                        
   1200 discour+  20   0  709760 249708  24632 S   1.3   3.1   3:22.96 ruby                                                                        
   1234 discour+  20   0  713344 250288  24636 S   1.3   3.1   3:30.24 ruby                                                                        
   1167 discour+  20   0  712832 247928  24436 S   1.0   3.1   3:24.75 ruby                                                                        
 188658 me        20   0   10424   4240   3576 R   0.7   0.1   0:00.36 top                                                                         
    448 root      20   0 1748444  84900  45884 S   0.3   1.1   6:09.98 dockerd                                                                     

sin que nadie esté conectado…

Los 3.5 minutos de tiempo de CPU acumulados para cada uno se registran tras 35 horas de funcionamiento, con muy poca actividad del usuario.

También intenté usar rbtrace, pero me muestra el siguiente error:
(pid is not listening for messages, did you require “rbtrace”)
¿Necesito reconstruir la imagen para solucionarlo? ¿O puedo simplemente ajustar o reconstruir algo dentro del contenedor?