CPU atascada al 99% durante unas horas: descifrando registros

8

extracto de syslog:

CRON[pid]: (user) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -
execdir fuser -s {} 2>/dev/null \; -delete)

Mi CPU se ha quedado atascada al 99% durante unas pocas horas, y supongo que es por esto. ¿Alguien sabría qué es esto, cómo comenzó y cómo detenerlo?

EDITAR: Lo intenté top -n1y veo esto a cambio varias veces:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
PID user      20   0     0    0    0 Z 99.9  0.0   0:00.00 fuser <defunct>

Esta línea se repite aproximadamente 8 veces.

EDIT2:

uname-a:

user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux`
lsb_release -a:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   code

EDITAR 3:

Después de reiniciar, el sistema volvió al mismo 99% cpu usagey al mismo top -n1resultado.

Jack
fuente
3
Hay un error en ese comando. La salida stderr del fusor se envía a / dev / null, según lo diseñado. Pero también lo es la salida stderr de find, que probablemente no fue así. (Debido a que -execdir en realidad no ejecuta el comando a través del shell, entonces el 2> / dev / null está siendo procesado por el shell directamente invocado por cron). Sin embargo, si bien esto puede estar ocultando síntomas relevantes, el posicionamiento de 2> / dev / null no es la causa del uso de su CPU.
James Youngman
3
Esto es muy extraño: un proceso zombie no debería estar usando tiempo de CPU (ni siquiera tiene código para ejecutar). Tiene un error en las herramientas de informes de proceso o en su núcleo. ¿Qué sistema operativo es este (versión, kernel, etc.)? ¿Hay alguna virtualización? ¿Cuál es la salida de uname -ay lsb_release -a?
Gilles 'SO- deja de ser malvado'
1
El fusercomando es probablemente de muy corta duración. Pasa su tiempo usando el tiempo de CPU (tiempo del sistema, no el tiempo del usuario) generando / procesando datos que (trivialmente) consume. Cada instancia de fuserprobablemente termina muy rápidamente. Pero probablemente se esté ejecutando muchas veces ya que hay, supongo, muchos archivos de sesión allí. La cifra del 99.9% probablemente solo significa que esa instancia de fuserCPU usada de forma intensiva antes de morir. findprobablemente no sea muy agresivo al cosechar niños; probablemente volverá a llamar waitpidsolo cuando salga de un directorio o se ejecute fusernuevamente.
James Youngman
uname-a: user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux lsb_release -a: no hay módulos LSB disponibles. ID de distribuidor: Ubuntu Descripción: Ubuntu 11.10 Lanzamiento: 11.10 Nombre en clave: código
Jack
Vaya, corrección: -execdir ... \;la espera debe ser inmediata, ya que el código de retorno es necesario como resultado del predicado (estaba mezclando esto con lo -execdir ...+que siempre devuelve verdadero, creo).
James Youngman

Respuestas:

5

Este es un trabajo cron que limpia los archivos de sesión antiguos de / var / lib / php5 /. Si se cuelga en un 99%, tal vez debería revisar la carpeta de destino (/ var / lib / php5 /) para ver una cantidad excesiva de archivos o incluso corrupción del sistema de archivos.

El proceso se inicia desde crontab. Vea los listados de crontab (descritos aquí ). Puede matar el proceso y eliminarlo de crontab, pero es más probable que tenga un problema subyacente, como una cantidad excesiva de archivos que deben repararse.

Tommy
fuente
1
Si termina con múltiples procesos de limpieza en ejecución, pueden interferir entre sí al generar bloqueos en el directorio cuando eliminan archivos. Intente eliminarlo temporalmente del crontab hasta que la carga desaparezca. Luego agréguelo con un intervalo más largo entre ejecuciones. Es posible que desee moverlo a un script con un mecanismo de bloqueo para asegurarse de que solo se esté ejecutando una instancia. Elimine todas las instancias múltiples del comando por ahora.
BillThor
2

Encontré la respuesta aquí: http://www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

en /etc/cron.d/php5 on Ubuntu 11.10:

Reemplazar
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2&gt;/dev/null \; -delete

Con
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

Jack
fuente
Esto funcionó, el problema parece estar resuelto.
Jack