Como saber se o IO do disco do Linux está causando excessivas baias de aplicativos (1 segundo)

4

Eu tenho um aplicativo Java que executa um grande volume (centenas de MB) de saída contínua (fluxo de texto sem formatação) para cerca de uma dúzia de arquivos em um sistema de arquivos SAN ext3 . Ocasionalmente, esse aplicativo faz uma pausa por vários segundos por vez. Eu suspeito que algo relacionado à funcionalidade vsfs (sistema de arquivos Veritas) (e / ou como ele interage com o sistema operacional) é o culpado.

Que passos posso dar para confirmar ou refutar esta teoria? Estou ciente de iostat e /proc/diskstats como pontos de partida.

Título revisado para desatribuir o registro em diário e enfatizar as "barracas"

Eu fiz alguns googling e encontrei pelo menos um artigo que parece descrever o comportamento como estou observando: Resolvendo o problema de latência ext3

Informações adicionais

  • Servidor Red Hat Enterprise Linux versão 5.3 (Tikanga)
  • Kernel: 2.6.18-194.32.1.el5
  • Disco de aplicativo principal é SAN de canal de fibra: lspci | grep -i fibre > > %código%
  • Informações de montagem: 14:00.0 Fibre Channel: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter (rev 03)
  • type vxfs (rw,tmplog,largefiles,mincache=tmpcache,ioerror=mwdisable) 0 0 > > %código%
por noahz 10.11.2012 / 00:36

7 respostas

4

Meu palpite é que há algum outro processo que ocupa a capacidade de E / S do disco por um tempo. iotop pode ajudá-lo a localizá-lo, se você tiver um kernel recente o suficiente.

Se este for o caso, não é sobre o sistema de arquivos, muito menos sobre journalling. É o agendador de E / S o responsável para arbitrar entre aplicativos conflitantes. Um teste fácil: verifique o agendador atual e tente um diferente. Isso pode ser feito na hora, sem reiniciar. Por exemplo, na minha área de trabalho para verificar o primeiro disco ( /dev/sda ):

cat /sys/block/sda/queue/scheduler
=>  noop deadline [cfq]

mostra que ele está usando o CFQ, que é uma boa opção para desktops, mas não tanto para servidores. Melhor definir 'prazo':

echo 'deadline' > /sys/block/sda/queue/scheduler
cat /sys/block/sda/queue/scheduler
=>  noop [deadline] cfq

e espere algumas horas para ver se melhora. Em caso afirmativo, defina-o permanentemente nos scripts de inicialização (depende da distribuição)

    
por 10.11.2012 / 19:11
4

Bem, um teste fácil seria montar o ext3 fs como ext2 e, em seguida, criar o perfil do desempenho do aplicativo.

    
por 10.11.2012 / 01:05
4

A resposta é "Sim" (journaling SEMPRE adiciona latência: -)

A questão de quão significativa ela é, na verdade, só pode ser respondida por um teste direto, mas geralmente assume que para cada operação (registrada em diário) leva aproximadamente o dobro do tempo que seria sem o registro em diário ativado.

Desde que você mencionou em seus comentários sobre outra resposta , você não pode fazer o teste direto em seu ambiente de produção ( e presumivelmente não tem um ambiente de desenvolvimento / teste que você possa usar) você tem uma outra opção: veja as estatísticas do disco e veja quanto tempo você gasta escrevendo no dispositivo de diário. Infelizmente isso só ajuda muito se o seu dispositivo de diário for discreto e puder ser instrumentado separadamente do disco "principal".

Segunda vez que estou conectando um vídeo da McKusick hoje, mas se você passar por este vídeo , há uma ótima discussão de alguns dos trabalhos que um sistema de arquivos de registro em diário precisa fazer (e o impacto no desempenho envolvido). Não é diretamente útil / relevante para você e sua pergunta em particular, mas um ótimo conhecimento geral sobre sistemas de arquivos e registro no diário.

    
por 10.11.2012 / 02:26
3

Sim, o diário causa latência. Mas é um pequeno pedaço da equação. Eu consideraria o quinto ou sexto item para olhar ... No entanto, este é outro em uma tendência de questões de armazenamento de sistemas que não incluem informações relevantes suficientes.

  • Que tipo de hardware de servidor você está usando? (fazer e modelar)
  • Descreva a configuração de armazenamento (controlador RAID, configuração de cache, número e organização de discos)
  • Qual sistema operacional você está usando? Versões de distribuição e kernel seriam úteis.

Por que eu peço essa informação?

A configuração do hardware e o nível do RAID podem ter um impacto enorme no desempenho observado. Ler e gravar o cache em hardware Os controladores RAID podem e devem ser ajustados para acomodar sua carga de trabalho e padrões de E / S. O sistema operacional é importante porque afeta as recomendações de ferramentas e as técnicas de ajuste que seriam úteis para você. Diferentes distribuições e kernels têm diferentes configurações padrão, assim, as características de desempenho variam entre elas.

Portanto, neste caso, há várias possibilidades:

  • Sua matriz RAID pode não conseguir acompanhar a carga de trabalho (não há fusos suficientes).
  • Ou você pode se beneficiar do armazenamento em cache .
  • Você pode ter problemas de fragmentação (quão cheio é o sistema de arquivos?).
  • Você pode ter um nível de RAID inadequado que seja contrário às características de desempenho necessárias.
  • Seu controlador RAID pode precisar de ajuste.
  • Talvez seja necessário alterar o agendador de E / S do sistema e executar algum ajuste de dispositivo de bloco .
  • Você poderia considerar um sistema de arquivos mais otimizado para desempenho, como o XFS .
  • Você pode descartar o diário e remontar seus sistemas de arquivos como ext2. Isso pode ser feito na hora.
  • Você pode ter discos SATA baratos que podem estar passando por tempos limite de barramento.

Mas como é, não temos informações suficientes para continuar.

    
por 10.11.2012 / 06:26
1

Eu tive esse problema no Redhat 4 com sistemas de arquivos ext3: muitas gravações em um sistema de arquivos ext3 = > grande espera no anoter ext3 FS write

Com a atualização do tempo de acesso, o acesso de leitura também pode ser suspenso = > solução alternativa: mount -o noatime

Atenciosamente, Jerome D.

    
por 10.11.2012 / 18:31
1

Você pode tentar se afastar de /proc/diskstats para /proc/meminfo : talvez seu buffer de write-back cresça e precise de flushing. Nós tivemos uma situação quando os buffers write-back ("dirty") foram recarregados mais rápido do que eles poderiam ser escritos. Então o Linux iniciou mais threads flush, piorando as coisas. Limitar a proporção permitida de buffers sujos antes que o processo seja pausado ajudou um pouco o problema. A outra dica que tenho é a correlação: Capture os horários em que a E / S está lenta e compare o que aconteceu ao mesmo tempo. Você poderia tentar isso, por exemplo:

while sleep 2
do
    (date; cat /proc/meminfo) >> /tmp/your_logfile
done

E compare quando o seu aplicativo parece lento.

    
por 09.05.2017 / 14:58
-1

Embora essa não seja a solução para a maioria das pessoas, pensei em mencionar esse problema específico que também experimentei antes.

Eu tive problemas significativos de I / O antes de usar unidades WD Green com o Linux Software RAID. Altamente recomendado usar as unidades WD Red, se esse for o seu problema. Se você usar Greens, à medida que suas unidades envelhecem, sua matriz provavelmente se tornará insuportavelmente lenta, já que essas unidades constantemente tentam se desligar e ligar para economizar energia, causando grandes picos de lags de I / O. Você eventualmente usará essas unidades porque elas começarão a realizar um enorme número de contagem de ciclos de carga em S.M.A.R.T.

    
por 13.11.2015 / 21:31