Estou tendo um problema com um sistema Linux e encontrei sysstat
e sar
relatei grandes picos de E/S de disco, tempo médio de serviço e tempo médio de espera.
Como posso determinar qual processo está causando esses picos na próxima vez que isso acontecer?
É possÃvel fazer com sar
? Posso encontrar essas informações nos sar
arquivos já gravados?
A saÃda de sar -d
, paralisação do sistema ocorreu por volta das 12h58-13h01.
12:40:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
12:40:01 dev8-0 11.57 0.11 710.08 61.36 0.01 0.97 0.37 0.43
12:45:01 dev8-0 13.36 0.00 972.93 72.82 0.01 1.00 0.32 0.43
12:50:01 dev8-0 13.55 0.03 616.56 45.49 0.01 0.70 0.35 0.47
12:55:01 dev8-0 13.99 0.08 917.00 65.55 0.01 0.86 0.37 0.52
13:01:02 dev8-0 6.28 0.00 400.53 63.81 0.89 141.87 141.12 88.59
13:05:01 dev8-0 22.75 0.03 932.13 40.97 0.01 0.65 0.27 0.62
13:10:01 dev8-0 13.11 0.00 634.55 48.42 0.01 0.71 0.38 0.50
Eu também tenho esta pergunta de acompanhamento para outro tópico que comecei ontem:
Se você tiver a sorte de pegar o próximo perÃodo de pico de utilização, poderá estudar as estatÃsticas de E/S por processo interativamente, usando iotop .
Você pode usar o pidstat para imprimir estatÃsticas io cumulativas por processo a cada 20 segundos com este comando:
Cada linha terá as seguintes colunas:
A saÃda fica assim:
Nada supera o monitoramento contÃnuo, você simplesmente não pode recuperar dados sensÃveis ao tempo após o evento...
No entanto, há algumas coisas que você pode verificar para implicar ou eliminar -
/proc
é seu amigo.Os campos 10, 11 são setores de escrita acumulada e escrita de tempo acumulado (ms). Isso mostrará suas partições quentes do sistema de arquivos.
Esses campos são PID, comando e tiques de espera de E/S cumulativos. Isso mostrará seus processos quentes, embora apenas se eles ainda estiverem em execução . (Você provavelmente quer ignorar seus threads de journalling do sistema de arquivos.)
A utilidade do acima depende do tempo de atividade, da natureza de seus processos de longa execução e de como seus sistemas de arquivos são usados.
Advertências: não se aplica a kernels pré-2.6, verifique sua documentação se não tiver certeza.
(Agora vá e faça um favor ao seu eu do futuro, instale Munin/Nagios/Cacti/whatever ;-)
Usar
atop
. ( http://www.atoptool.nl/ )Grave os dados em um arquivo compactado que
atop
possa ser lido posteriormente em um estilo interativo. Faça uma leitura (delta) a cada 10 segundos. faça isso 1080 vezes (3 horas; então, se você esquecer, o arquivo de saÃda não ficará sem disco):Depois que algo ruim acontece novamente:
(mesmo que ainda esteja sendo executado em segundo plano, ele apenas acrescenta a cada 10 segundos)
Já que você disse IO, eu apertaria 3 teclas: tdD
Usar
btrace
. É fácil de usar, por exemplobtrace /dev/sda
. Se o comando não estiver disponÃvel, provavelmente está disponÃvel no pacote blktrace .EDIT : Como o debugfs não está ativado no kernel, você pode tentar
date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf
ou similar. Logging page faults obviamente não é a mesma coisa que usar btrace, mas se você tiver sorte, pode lhe dar algumas dicas sobre os processos que mais consomem disco. Acabei de testar um dos meus servidores mais intensivos em E/S e a lista inclui os processos que sei que estão consumindo muita E/S.Utilização do disco por cada processo:
$ glances
# (com htop a melhor ferramenta para ter ideia do que está acontecendo. Pressione as teclas de seta para a direita para classificar o processo por utilização do disco)$ sudo iotop -ao
# (-a acumulado; -o mostra apenas processos com atividade)