Estou gerenciando algumas máquinas virtuais no Azure e algumas vezes por semana, em horários aparentemente aleatórios, algumas delas iniciam a leitura de I/O em velocidades acima de 400 Mb/s . Isso ocorre para uma máquina por vez, não simultaneamente.
Essas máquinas usam SSDs como discos rígidos, mas essas velocidades de leitura parecem anormais.
Além disso, as máquinas que experimentam esta atividade tornam-se inacessíveis via SSH após alguns minutos .
Atualmente, estou usando o iotop tentando enviá-lo para um arquivo de log, então, depois de reiniciar a máquina travada, posso analisá-lo e tentar identificar o(s) processo(s) que está(ão) causando o problema.
Também estou usando o crontab para executá-lo a cada minuto.
Encontre abaixo o script atual que estou usando:
#!/usr/bin/env bash
OUT=/var/log/zs/io.log
echo $(date) >> $OUT
echo $(iotop -o -b -n 1|head -n 2) >> $OUT
echo $(iotop -o -b -n 1|head -n 6|tail -n +4) >> $OUT
E o arquivo de log mostrando o pico de E/S:
Fri Jan 12 09:33:01 CET 2024
Total DISK READ : 113.45 M/s | Total DISK WRITE : 7.04 M/s Actual DISK READ: 171.85 M/s | Actual DISK WRITE: 85.79 M/s
3350 be/4 root 41.59 M/s 0.00 B/s ?unavailable? containerd 11744 be/4 root 112.49 M/s 0.00 B/s ?unavailable? dockerd -H fd:// --containerd=/run/containerd/containerd.sock 11925 be/4 root 1142.56 K/s 0.00 B/s ?unavailable? dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Fri Jan 12 09:58:35 CET 2024
Aparentemente parece estar relacionado a um processo docker, mas gostaria de saber:
- É possível evitar que a máquina fique inacessível?
- Como rastrear o contêiner Docker exato que está causando esse problema?
Agradeço antecipadamente.
O Docker deve ser capaz de definir um limite para operações io, através do uso de cgroups (V2).
No entanto, altas taxas de gravação em disco geralmente não fazem com que a máquina pare de responder via ssh.
Meu melhor palpite aqui é que não é um único contêiner docker, mas seu sistema operacional: você pode ter a troca ativada e um de seus contêineres está explorando o uso de RAM.
De qualquer forma, isso é algo que deve ser muito fácil de descobrir usando sua ferramenta favorita de monitoramento de processos.
top
serviria, mas eu prefirohtop
, pois ele também tem a capacidade de mostrar uma coluna de taxa de leitura/gravação Io.Você deve usar a mesma mecânica, integração de cgroups do docker, para limitar a quantidade de RAM que um contêiner pode exigir. Não desative a troca; isso só piora a situação, pois você perde a flexibilidade de ter uma demanda excessiva de RAM em curto prazo.