Como solucionar problemas de alto tempo de espera de I/O no Linux

O tempo de espera de I/O é uma métrica usada para medir a quantidade de tempo que a CPU espera pela conclusão das operações de I/O do disco. Um alto tempo de espera de I/O indica uma CPU ociosa e solicitações de I/O pendentes – embora possa não prejudicar a integridade do sistema, limitará o desempenho da CPU.

A espera de I/O da CPU significa que, embora nenhum processo estivesse em estado executável, pelo menos uma operação de I/O estava em andamento. Em termos simples, a espera de I/O é o tempo gasto pela CPU aguardando a conclusão da I/O.

O que ocasiona um alto tempo de espera de um I/O?

A espera de I/O simplesmente indica o estado da CPU ou dos núcleos da CPU. Uma espera alta de I/O significa que a CPU está pendente nas solicitações, mas é necessária uma investigação mais aprofundada para confirmar a origem e o efeito.

Aqui estão algumas causas possíveis para o alto tempo de espera de I/O:

  • Gargalos na camada de armazenamento que fazem com que a unidade demore mais para responder às solicitações de I/O.
  • Uma fila de solicitações de I/O na camada de armazenamento que leva a um aumento na latência
  • Bloqueie dispositivos (como discos físicos) que sejam muito lentos ou simplesmente no ponto de saturação.
  • Processos que estão em estado de suspensão ininterrupta.
  • Processos que executam operações pesadas de leitura e gravação no disco
  • Troca de uma partição ou arquivo executada devido à falta de RAM no sistema operacional host ou convidado
  • Operações de I/O de disco e rede, que são a causa mais comum de lentidão do sistema
  • Disco lento ou RAID degradada que atrasa o acesso à memória para operações de leitura e gravação

A espera do I/O está afetando a performance do sistema?

A alta espera de I/O força o servidor a lidar com maior largura de banda para realizar outros cálculos enquanto aguarda solicitações de I/O. A espera de I/O é uma métrica comum para analisar o desempenho do sistema. Quando a espera alta de I/O ocorre com frequência, ela pode impactar negativamente o desempenho do sistema, tornando-o mais lento ou causando problemas como baixa taxa de transferência de transações no banco de dados e degradação da integridade em aplicações e bancos de dados.

Diagnosticando o tempo de espera de I/O no Linux

Os dois comandos mais comumente usados para identificar e solucionar problemas de tempo de espera de I/O no Linux são top e vmstat. Esses comandos exibirão várias estatísticas em nível de CPU, incluindo o tempo de espera do I/O.

Usando o comando top

O comando top é o comando mais fácil e mais amplamente usado para identificar o tempo de espera de I/O no Linux. Ele exibe uma visão dinâmica e em tempo real do sistema, estatísticas em nível de CPU e uma lista em execução de processos gerenciados pelo kernel.

Syntax:

top [options]

Example:

A execução do comando top exibirá um output semelhante à mostrada abaixo:

Fig. 1: Saída do comando top Fig. 1: Saída do comando top

Vamos nos concentrar na linha %Cpu(s). Ele exibe, entre outras estatísticas importantes, o tempo de espera de I/O. O tempo de espera de I/O é indicado pelo rótulo wa na linha %Cpu(s).

wa denota a porcentagem de tempo que a CPU esperou pela conclusão da I/O. Se você estiver em um sistema com processador multi-core, poderá pressionar 1 enquanto o comando top estiver em execução para obter um detalhamento do uso da CPU por CPU.

Usando o comando vmstat

O comando vmstat é outra ferramenta de monitoramento de desempenho fornecida pelo Linux. Ele fornece informações sobre memória, processos, CPU e muito mais. Por padrão, vmstat exibe as estatísticas desde a última reinicialização do sistema. Ele também pode mostrar estatísticas em tempo real que são atualizadas após um intervalo especificado.

Syntax:

vmstat [options][delay [count]]

Os dois parâmetros comumente usados com o comando vmstat são:

  • delay: Este parâmetro é usado para atualizar continuamente os relatórios após o atraso especificado em segundos.
  • count: Este parâmetro é usado para definir o número de atualizações necessárias. O valor padrão é infinito.

Example:

Executar o comando vmstat fornecerá um output semelhante à mostrada abaixo:

Fig. 2: Saída do comando vmstat Fig. 2: Saída do comando vmstat

O output está dividido em quatro seções; vamos nos concentrar na seção CPU. As colunas nesta seção são semelhantes à linha %Cpu(s) do comando Top. Junto com o tempo de espera de I/O (wa), também obtemos algumas informações adicionais por meio do comando vmstat, como o total de memória livre ou o número de blocos trocados de e para I/O. Ter menos memória livre, por exemplo, pode levar a um alto tempo de espera de I/O.

Identificando os processos causando um alto tempo de espera do I/O.

Depois de confirmar que você está lidando com um alto tempo de espera de I/O, a próxima etapa deverá ser encontrar processos responsáveis por essas operações de I/O. Um dos comandos mais fáceis e usados com mais frequência é iotop.

Usando o comando iotop

O comando iotop é idêntico ao comando Top no sentido de que é usado para monitorar o uso de I/O do disco junto com a lista em execução de processos ou threads responsáveis por ele. É baseado em Python e requer acesso ao kernel para monitorar os processos que realizam I/O.

Syntax:

iotop [options]

Example:

Executar o comando iotop fornecerá um output semelhante ao mostrado abaixo:

Fig. 3: Saída do comando iotop Fig. 3: Saída do comando iotop

A primeira linha contém a largura de banda total de leitura e gravação do disco. A próxima linha exibe a largura de banda real das operações de leitura e gravação realizadas pelos processos ou threads atualmente realizando I/O. A próxima seção exibe a lista de processos em execução com dados sobre o uso atual de I/O do disco. A coluna mais importante aqui é a coluna I/O, que exibe a porcentagem de tempo que o processo esteve realizando I/O em relação ao tempo total de processamento. Esta lista específica de processos é classificada em ordem inversa nesta coluna.

Uma das opções mais comumente usadas com este comando é -o ou -only. Execute junto com o comando (iotop -o), ele restringe os resultados a uma lista em execução de processos que estão realmente executando I/O.

Identificando os discos que estão sendo gravados por I/O

Os comandos top e vmstat nos informam sobre o tempo de espera de I/O, e o comando iotop nos ajuda a identificar os processos que realizam operações de I/O . Um outro fator importante a considerar é quais discos estão sendo usados nessas operações. O comando iostat fornece essas informações.

Usando o comando iostat

O comando iostat exibe as estatísticas de input/output de um sistema. Ele gera relatórios em nível de dispositivo monitorando o período ativo em relação às taxas médias de transferência. E assim como os comandos top e vmstat , iostat também exibe as estatísticas da CPU.

Syntax:

iostat [option] [interval] [count]

Os parâmetros de intervalo e contagem aqui são semelhantes aos do comando vmstat e são usados para mostrar atualizações em tempo real infinitamente ou apenas para contagens específicas.

Example:

Executar o comando iostat fornecerá um output semelhante ao mostrado abaixo:

Fig. 4: Saída do comando iostat Fig. 4: Saída do comando iostat

A primeira linha acima exibe as estatísticas médias da CPU, incluindo o tempo de espera de I/O. Representa o mesmo valor de wa nos comandos top e vmstat. As próximas seções fornecem os seguintes dados para todos os dispositivos e partições:

  • Device: A partição ou nome do dispositivo
  • tps: Transferência por segundo. Um processador sobrecarregado ou ocupado sempre terá um tps mais alto.
  • Blk_read/s (kB_read/s): O número de blocos de dados lidos do dispositivo por segundo
  • Blk_wrtn/s (kB_wrtn/s): O número de blocos de dados gravados no dispositivo por segundo
  • Blk_read (kB_read): O número total de blocos lidos neste dispositivo desde a última reinicialização
  • Blk_wrtn (kB_wrtn): The total number of blocks written to this device since the last reboot

Consertando o alto tempo de espera de um I/O no Linux

Depois de identificarmos os processos por trás do alto tempo de espera de I/O e os discos envolvidos, há várias correções que podemos aplicar. Estes são alguns dos métodos mais comuns para minimizar o alto tempo de espera de I/O:

  • Reduza a frequência de leituras e gravações de disco reduzindo operações de I/O, como consultas de database.
  • Certifique-se de que o sistema operacional esteja atualizado para a versão mais recente com todos os patches instalados para que qualquer espera de I/O causada por bugs no sistema operacional possa ser reduzida.
  • Atualize o disco rígido e a RAM no servidor e instale discos com RPMs mais altos ou SSD com alto I/OPS.
  • Se o tempo do usuário da CPU for muito alto, tente encerrar o processo ou processos que estão causando o dano.
  • Verifique o uso de swap – alto uso de swap significa que o sistema está realmente sem RAM. Neste caso, aumentar a RAM pode reduzir o tempo de espera de I/O.
  • Verifique se há algum possível vazamento de memória – alguns aplicativos podem consumir memória sem liberá-la após o uso. Isso pode levar a um vazamento de memória e, eventualmente, a um alto tempo de espera de I/O.

Conclusão

Ao solucionar problemas de alta espera de I/O no Linux, é importante entender a causa raiz como primeira etapa. Os comandos top e vmstat podem ajudar a diagnosticar o alto tempo de espera de I/O, enquanto iotop e iostat podem ajudar solucionar problemas identificando os processos e discos que causam o alto tempo de espera de I/O. Aprendemos que existem várias maneiras de lidar com o alto tempo de espera de I/O, dependendo da causa. Concentre-se em minimizar a espera de I/O – quanto menor o tempo de espera de I/O, melhor será o desempenho do seu sistema.

Was this article helpful?
Monitore seu ambiente Linux

Verifique a integridade e a disponibilidade de seus servidores Linux para obter desempenho ideal com a ferramenta de monitoramento Linux do Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us