CPU travada em 99% por algumas horas: descobrindo logs

8

extrair 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)

Minha CPU está travada em 99% há algumas horas, e estou assumindo que é por causa disso. Alguém saberia o que é isso, como tudo começou e como pará-lo?

EDIT: Eu tentei top -n1e vejo isso em retorno várias vezes:

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 linha se repete cerca de 8 vezes.

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

EDIT 3:

Após a reinicialização, o sistema voltou ao mesmo 99% cpu usagee ao mesmo top -n1resultado.

Jack
fonte
3
Há um erro nesse comando. A saída stderr do fusor está sendo enviada para / dev / null, conforme projetado. Mas o mesmo ocorre com a saída stderr do find, que provavelmente não foi. (Como -execdir, na verdade, não inicia o comando pelo shell, o 2> / dev / null está sendo processado pelo shell diretamente invocado pelo cron). No entanto, embora isso possa ocultar sintomas relevantes, o posicionamento do 2> / dev / null não é a causa do uso da CPU.
James Youngman
3
Isso é muito estranho: um processo zumbi não deve estar usando tempo de CPU (ele nem sequer tem código para executar). Você tem um bug nas ferramentas de relatório de processo ou no seu kernel. Que SO é esse (versão, kernel, etc.)? Existe alguma virtualização? Qual é a saída de uname -ae lsb_release -a?
Gilles 'SO- stop be evil'
1
O fusercomando provavelmente é de curta duração. Ele gasta seu tempo usando o tempo da CPU (hora do sistema, não do usuário), gerando / proc dados que (trivialmente) consome. Cada instância fuserprovavelmente termina muito rapidamente. Mas provavelmente está sendo executado muitas vezes, já que, suponho, existem muitos arquivos de sessão. A cifra de 99,9% provavelmente significa apenas que a instância de fuserCPU usada intensivamente antes de morrer. findprovavelmente não é muito agressivo com a colheita de crianças; provavelmente chamará waitpidnovamente somente quando sair de um diretório ou executar fusernovamente.
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: Nenhum módulo LSB está disponível. ID do Distribuidor: Ubuntu Descrição: Ubuntu 11.10 Release: 11.10 Nome de código: code
Jack
Ops, correção: -execdir ... \;a espera deve ser imediata, pois o código de retorno é necessário como resultado do predicado (eu estava misturando isso com o -execdir ...+que sempre retorna verdadeiro, eu acho).
James Youngman

Respostas:

5

Este é um trabalho cron que limpa os arquivos antigos da sessão em / var / lib / php5 /. Se o bloqueio persistir em 99%, talvez você deva verificar a pasta de destino (/ var / lib / php5 /) para ver uma quantidade excessiva de arquivos ou talvez até corrupção do sistema de arquivos.

O processo é iniciado a partir do crontab. Veja as listagens do crontab (descritas aqui ). Você pode matar o processo e removê-lo do crontab, mas é mais provável que você tenha um problema subjacente, como uma quantidade excessiva de arquivos que precisa ser corrigida.

Tommy
fonte
1
Se você terminar com vários processos de limpeza em execução, eles podem interferir entre si, gerando bloqueios no diretório ao excluir arquivos. Tente removê-lo temporariamente do crontab até que a carga seja liberada. Em seguida, adicione-o com um intervalo mais longo entre as execuções. Você pode movê-lo para um script com um mecanismo de bloqueio para garantir que apenas uma instância esteja em execução. Elimine quaisquer instâncias múltiplas do comando por enquanto.
BillThor
2

Encontre a resposta aqui: http://www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

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

Substituir
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

Com
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
fonte
Isso funcionou, o problema parece estar resolvido.
28412 Jack