CentOS - Alto uso da CPU em uma determinada hora da noite

4

Eu tenho um servidor CentOS-5 que tem muito pouca carga. Uma saída típica do comando "sar" é exibida assim:

02:20:01 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
02:30:01 PM       all      0.63      0.00      1.23      0.31      0.00     97.84
02:40:01 PM       all      0.92      0.32      1.34      0.45      0.00     96.97
02:50:01 PM       all      0.76      0.00      0.93      0.77      0.00     97.54
03:00:01 PM       all      0.41      0.00      0.72      0.15      0.00     98.72
03:10:01 PM       all      0.78      0.32      1.49      1.83      0.00     95.58
03:20:01 PM       all      0.27      0.00      0.50      0.62      0.00     98.61

No entanto, estou observando que todas as noites às 4:10, o uso da CPU é muito alto. Isso acontece quase todas as noites, exceto alguns dias em um mês. O comando "sar" mostra algo assim:

03:00:01 AM       all      0.10      0.00      0.10      0.11      0.00     99.68
03:10:01 AM       all      0.08      0.32      0.18      0.21      0.00     99.21
03:20:01 AM       all      0.03      0.00      0.03      0.19      0.00     99.76
03:30:01 AM       all      0.01      0.00      0.02      0.06      0.00     99.91
03:40:02 AM       all      0.75      0.32      3.21     15.43      0.00     80.28
03:50:01 AM       all      0.95      0.00      3.43      9.25      0.00     86.36
04:00:01 AM       all      0.69      0.00      3.79      4.86      0.00     90.66
04:10:01 AM       all     22.38      0.54      4.47     30.92      0.00     41.69
04:20:01 AM       all      2.99      0.02      4.58      4.95      0.00     87.46
04:30:01 AM       all      0.34      0.00      0.61     13.22      0.00     85.83
04:40:01 AM       all      0.05      0.32      0.17      0.52      0.00     98.95
04:50:01 AM       all      0.22      0.00      0.36      0.11      0.00     99.32
05:00:01 AM       all      0.23      0.00      0.36      0.12      0.00     99.28

Como posso determinar o que está causando esse pico no uso da CPU e no iowait etc. Examinei / var / log / messages, mas não consegui determinar. Não há outro trabalho cron ou outras coisas configuradas para serem executadas naquele momento. Como isso está sendo mostrado em% user, só consigo ver que é algum processo do usuário. Como posso determinar exatamente a causa?

    
por WebTenet Solutions 03.01.2012 / 13:56

4 respostas

6

É quando os scripts cron.daily são executados ... Por padrão, ele é executado diariamente logo após as 4:00 da manhã.

De /etc/crontabs

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily <-- THIS ONE!!
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

E em /etc/cron.daily .

O culpado provavelmente é seu mlocate.cron , que executa updatedb e pode ser bastante intensivo em alguns sistemas:

#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
    
por 03.01.2012 / 14:19
4

Como declarado em / etc / crontab, há uma execução automática do cron programada às 04:02, todos os dias:

[...]
02 4 * * * root run-parts /etc/cron.daily

Executar um ls /etc/cron.daily / mostrará os comandos em execução programados para 04:02 (eles são executados sequencialmente). Você pode facilmente modificá-los para a carga de saída 'antes' e depois que eles são executados.

No entanto, se esta é uma instalação padrão do CentOS, há uma grande probabilidade de que o script responsável pela carga alta seja mlocate.cron, 0logwatch (se estiver instalado) ou logrotate.

O mlocate executará uma verificação completa do sistema de arquivos (o que explicaria o aumento da espera no seu sistema), 0logwatch irá analisar seu arquivo de log (que pode ser muito grande, resultando em operações de i / o) e logrotate também pode criar E / S significativa se mover arquivos entre sistemas de arquivos.

    
por 03.01.2012 / 14:19
3

Como você está dizendo que isso acontece às 4:10 quase todos os dias, uma maneira crua seria executar ps aux no cron para cada minuto entre 4:05 e 4:15 e obter a saída gravada em um arquivo. Você pode então verificar o% de uso da CPU do comando que está consumindo sua cpu.

    
por 03.01.2012 / 14:05
2

É provável que seja uma tarefa do cron - possivelmente "locatedb" sendo atualizada?

Adicionar sua própria saída cron'd de "ps" para uma noite pode ajudar a identificar o culpado.

    
por 03.01.2012 / 14:05