Alta carga do servidor - [jbd2 / md1-8] usando 99,99% de E / S

8

Eu tenho tido um pico de carga na última semana. Isso geralmente ocorre uma ou duas vezes por dia. Eu consegui identificar da iotop que [jbd2 / md1-8] está usando 99,99% IO. Durante os tempos de alta carga, não há tráfego alto para o servidor.

As especificações do servidor são:

  • AMD Opteron 8 core
  • 16 GB de RAM
  • 2x2.000 GB 7.200 RPM HDD Software Raid 1
  • Cloudlinux + Cpanel
  • O mysql está devidamente ajustado

Além dos picos, a carga geralmente fica em torno de 0,80 no máximo.

Eu procurei por aí, mas não consegui encontrar o que [jbd2 / md1-8] faz exatamente. Alguém já teve esse problema ou alguém conhece uma solução possível?

Obrigado.

ATUALIZAÇÃO:

TIME        TID     PRIO     USER    DISK READ    DISK WRITE    SWAPIN  IO       COMMAND
16:05:36     399     be/3    root    0.00 B/s      38.76 K/s    0.00 %  99.99 %  [jbd2/md1-8]
    
por Alex 08.02.2013 / 15:49

2 respostas

6

Isso não é realmente uma resposta, pois não há contexto suficiente para explicar a causa exata, mas é uma descrição de como consegui acompanhar isso quando aconteceu comigo.

Percebi que meu jbd2/md0-8 continuava aparecendo no topo de iotop . Eu olhei em /sys/kernel/debug/tracing/events/jbd2 para ver quais opções existem para determinar o que o jbd2 estava fazendo.

NOTA-1: Para ver a saída dos eventos de rastreio de depuração cat /sys/kernel/debug/tracing/trace_pipe - Eu tive esta execução no terminal enquanto ativava / desativava os rastreios.

NOTA-2: Para permitir que eventos para rastreamento usem, e. %código%. Para desativar echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable .

Comecei ativando echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable - mas não havia nada que parecesse particularmente interessante na saída para ele. Tentei alguns outros eventos para rastrear e quando habilitei /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable vi que estava ocorrendo a cada segundo:

# cat /sys/kernel/debug/tracing/trace_pipe
...
jbd2/md0-8-2520  [004] .... 658660.216492: jbd2_commit_flushing: dev 9,0 transaction 32856413 sync 0
jbd2/md0-8-2520  [001] .... 658661.334900: jbd2_commit_flushing: dev 9,0 transaction 32856414 sync 0
jbd2/md0-8-2520  [001] .... 658661.394113: jbd2_commit_flushing: dev 9,0 transaction 32856415 sync 0

Parecia que isso estava relacionado a /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enable / sync(2) / fsync(2) , então procurei um meio de vinculá-lo a um processo e descobri o seguinte:

# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...

Quando ativei, vi a seguinte saída:

# cat /sys/kernel/debug/tracing/trace_pipe
...
      nzbget-17367 [002] .... 658693.222288: ext4_sync_file_enter: dev 9,0 ino 301924373 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [001] .... 658693.284080: jbd2_commit_flushing: dev 9,0 transaction 32856465 sync 0
      nzbget-17367 [000] .... 658693.334267: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658693.334275: jbd2_commit_flushing: dev 9,0 transaction 32856466 sync 0
      nzbget-17367 [001] .... 658694.369514: ext4_sync_file_enter: dev 9,0 ino 301924367 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.414861: jbd2_commit_flushing: dev 9,0 transaction 32856467 sync 0
      nzbget-17367 [001] .... 658694.470872: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.470880: jbd2_commit_flushing: dev 9,0 transaction 32856468 sync 0

Isso me deu o nome do processo / id - e depois de fazer mais algumas depurações desse processo ( msync(2) ) eu descobri que estava fazendo nzbget a cada segundo. Depois que eu mudei sua configuração ( fsync(2) , indocumentado acho, achei na fonte) para parar de fazer isso por segundo FlushQueue=no o problema foi embora.

Minha versão do kernel é fsync(2) .Eu acho que havia algumas opções que habilitei (manualmente ou com 4.4.6-gentoo ) em algum momento na configuração do kernel para obter make oldconfig com esses eventos - então se você não tiver talvez só procure na internet mais informações sobre como ativá-lo.

    
por 06.09.2016 / 01:40
1

Esta parece ser uma coisa relacionada à atualização de um periódico. Quantos discos o software RAID compõe. Você pode me mostrar o comando usado para criá-lo.

Você também pode colar a saída dumpe2fs. Primeiro, identifique o dispositivo físico em que você vê a carga. Use df para saber disso. Então,

dumpe2fs /dev/sdaX > /tmp/dump

Para o seu caso, pode ser / dev / md0.

Além disso, execute isso.

iostat -xdk 1 25

No momento da alta questão de IO.

Eu não sei o cloudlinux, mas é a ferramenta blktrace disponível sob ele.

    
por 08.02.2013 / 18:37