¿Cómo evitar tantas instancias de apt-check en ejecución?

18

Tengo un servidor Ubuntu 12.04 que simplemente se bloqueó debido a una causa muy obvia: más de 30 apt-checkprocesos que consumen toda la memoria, el asesino OOM se activa, matando servicios vitales. No estoy seguro de dónde apt-checkprovienen los procesos, pero supongo que mis complementos Nagios / Icinga check_aptpodrían usarlo, así como la byobulínea de estado puede querer mostrar su salida. Supongo que algo se bloqueó y todos los procesos estaban esperando, pero conservando la memoria.

¿Cómo puedo evitar tener tantas instancias apt-checken el sistema? No tiene sentido para mí y debería salir tan pronto como no pueda obtener un bloqueo de lectura en la base de datos dpkg.

Parece que no soy el único que tiene problemas aquí. Todas las sugerencias apt-checkson bastante negativas:

ingrese la descripción de la imagen aquí

(navegador limpio, no conectado, sin búsqueda personalizada)

gertvdijk
fuente

Respuestas:

8

Un poco de inmersión apt-checkme dio estas pistas por ser un guión muy contundente que necesita ser reparado. Con el debido respeto a los autores, falla en mis servidores. Aquí están mis pensamientos:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • fuerza nicelevel 19 por sí mismo
  • sin tiempos de espera establecidos en acciones

La combinación de los dos últimos le permite apilarse sin cesar en espiral hacia abajo. Si el sistema se usa para otros fines con mayor prioridad, la cantidad de procesos simplemente aumentará y no tendrá fin, ya apt-checkque nunca tendrá prioridad sobre él. Los problemas solo empeorarán una vez que el asesino de OOM decida matar los procesos vitales de su sistema.

Si cualquiera de estos dos aspectos en el comportamiento fuera diferente, no permitiría que el sistema terminara en un estado tan roto, es mi suposición.

Si bien las cadenas son correctas acerca de que los procesos principales también son responsables en esto, creo que los puntos a continuación son defectuosos apt-checky deben informarse como un error para que se aborden correctamente:

  • debería insinuar que el asesino OOM se mató primero
  • no debería establecer el nicelevel hardcoded
  • debería salir si toma una cantidad de tiempo irrazonable obtener información

En realidad, parece que el asesino de OOM de Linux está haciendo algo de heurística al respecto. Los procesos anidados obtendrán un puntaje mayor, y los procesos de larga duración disminuirán. ( fuente - gracias a Ulrich Dangel por señalarlo )

Posible solución que puedo proponer:

  • resultados de caché después del procesamiento
  • caché de salida si es menor que N cantidad de segundos sin cargar todas las bibliotecas Python-APT para cada --helpinvocación simple (par ).
  • haga que el nivel agradable sea configurable - ¡ Permítame cambiar / deshabilitar esto, por favor! Creo que establecerlo en 0 realmente ayudará
  • hacer que aumente el puntaje asesino de OOM
gertvdijk
fuente
Creo que se ha perdido lo más importante que debe hacer: usar un archivo de bloqueo y no permitir que se ejecute más de una instancia a la vez.
derobert
@derobert Es un script que cualquier usuario puede ejecutar, sin privilegios específicos en Ubuntu, no un demonio. ¿O puedo usar /var/run/ /tmppara este archivo de bloqueo que se puede leer / escribir de forma segura? Gran agujero allí: agregue el archivo de bloqueo y el administrador no será notificado de las actualizaciones del sistema.
gertvdijk
Lo que sea que lo inicie automáticamente (lo que lleva a más de 30 copias en ejecución) debe realizar el bloqueo. O podría hacerlo por usuario. De cualquier manera, ese es un error que necesita ser resuelto.
derobert
Nagios / Icinga parece evitar la trampa. Al menos, tuvo un tiempo de espera de 10 segundos y advirtió si se superó. (Aunque no puedo encontrar cómo configurar el tiempo de espera, prefiero más tiempo). Byobu en Debian es lo que me causó el problema; en Ubuntu se supone que está arreglado .
sourcejedi
4

Debe averiguar qué proceso está generando apt-check. puedes usar algo como ps para obtener el árbol de procesos.

ps -A --forest

Si apt-check no tiene padres, entonces podría ser un problema con apt-check en sí mismo y no en un programa en particular. si ese es el caso, trataría de depurar apt-check.

instrumentos de cuerda
fuente
Gracias. Me dio algunas ideas para profundizar. Sin embargo, esto me lleva a creer que realmente es un problema apt-check: vea mi propia respuesta .
gertvdijk
Si consume memoria y tiempo de CPU, no es un zombie.
Gilles 'SO- deja de ser malvado'
@Gilles buen punto.
Cuerdas
0

Base escrita en Ubuntu 12.04

Tengo el mismo problema y descubrí que se debe a que byobu, si solo ejecuto apt-get updatesin usar byobu, no habrá ningún check-aptproceso. Además, se refiere a update-notifierempaquetar, cuando quité esos paquetes (update-Notifer común, actualizar-notificador), el uso byobuy funcionamiento apt-get update, que corrió otro comando pero usando exactamente la misma memoria: apt-get -s -o Debug::NoLocking=true upgrade.

Algunas otras cosas pueden funcionar apt-get update(pero probablemente no funcionen check-apt)

En un escritorio, hay más cosas involucradas.

Concluir: byobudetecta el evento cuando ejecuta apt-get updatey activa estos check-aptprocesos, vuelva a configurar la barra de estado byobupara solucionarlo.

HVNSweeting
fuente