
Um histórico rápido; Eu tenho um servidor de arquivos de 10 Gbit com seis SSDs de dados executando o CentOS 8 e estou lutando para saturar a linha. Tudo bem se eu limitar a largura de banda em 5 ou 6 Gbps. Aqui estão alguns gráficos do Cockpit mostrando que tudo está bem (~850 usuários simultâneos, limite de 5 Gbps).
Infelizmente, quando eu empurro mais alto, a largura de banda flutua em ondas gigantes. Normalmente, isso é um sinal de disco saturado (ou placa SATA) e, nas caixas do Windows, resolvi isso assim:
- Abra o "Monitor de Recursos".
- Selecione a guia "Disco".
- Observe os gráficos de "Comprimento da fila". Qualquer disco/raid com comprimento de fila constantemente acima de 1 é um gargalo. Atualize-o ou reduza sua carga.
Agora estou vendo esses sintomas em um servidor CentOS 8, mas como identificar o culpado? Meus SSDs SATA são divididos em três matrizes RAID0 de software como esta:
# cat /proc/mdstat
Personalities : [raid0]
md2 : active raid0 sdg[1] sdf[0]
7813772288 blocks super 1.2 512k chunks
md0 : active raid0 sdb[0] sdc[1]
3906764800 blocks super 1.2 512k chunks
md1 : active raid0 sdd[0] sde[1]
4000532480 blocks super 1.2 512k chunks`
iostat
flutua muito e geralmente tem uma% iowait alta. Se estou lendo corretamente, parece indicar que md0 (sdb + sdc) tem a maior carga. Mas é um gargalo? Afinal, %util não chega nem perto de 100.
# iostat -xm 5
avg-cpu: %user %nice %system %iowait %steal %idle
7.85 0.00 35.18 50.02 0.00 6.96
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 106.20 57.20 0.89 0.22 3.20 0.00 2.93 0.00 136.87 216.02 26.82 8.56 3.99 0.92 14.96
sde 551.20 0.00 153.80 0.00 65.80 0.00 10.66 0.00 6.75 0.00 3.44 285.73 0.00 0.64 35.52
sdd 571.60 0.00 153.77 0.00 45.80 0.00 7.42 0.00 6.45 0.00 3.40 275.48 0.00 0.63 35.98
sdc 486.60 0.00 208.93 0.00 305.40 0.00 38.56 0.00 20.60 0.00 9.78 439.67 0.00 1.01 49.10
sdb 518.60 0.00 214.49 0.00 291.60 0.00 35.99 0.00 81.25 0.00 41.88 423.52 0.00 0.92 47.88
sdf 567.40 0.00 178.34 0.00 133.60 0.00 19.06 0.00 17.55 0.00 9.68 321.86 0.00 0.28 16.08
sdg 572.00 0.00 178.55 0.00 133.20 0.00 18.89 0.00 17.63 0.00 9.81 319.64 0.00 0.28 16.00
dm-0 5.80 0.80 0.42 0.00 0.00 0.00 0.00 0.00 519.90 844.75 3.69 74.62 4.00 1.21 0.80
dm-1 103.20 61.40 0.40 0.24 0.00 0.00 0.00 0.00 112.66 359.15 33.68 4.00 4.00 0.96 15.86
md1 1235.20 0.00 438.93 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 363.88 0.00 0.00 0.00
md0 1652.60 0.00 603.88 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 374.18 0.00 0.00 0.00
md2 1422.60 0.00 530.31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 381.72 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
5.14 0.00 22.00 72.86 0.00 0.00
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 34.00 37.40 0.15 0.15 5.20 0.00 13.27 0.00 934.56 871.59 64.34 4.61 4.15 0.94 6.74
sde 130.80 0.00 36.14 0.00 15.00 0.00 10.29 0.00 5.31 0.00 0.63 282.97 0.00 0.66 8.64
sdd 132.20 0.00 36.35 0.00 14.40 0.00 9.82 0.00 5.15 0.00 0.61 281.57 0.00 0.65 8.62
sdc 271.00 0.00 118.27 0.00 176.80 0.00 39.48 0.00 9.52 0.00 2.44 446.91 0.00 1.01 27.44
sdb 321.20 0.00 116.97 0.00 143.80 0.00 30.92 0.00 12.91 0.00 3.99 372.90 0.00 0.91 29.18
sdf 340.20 0.00 103.83 0.00 71.80 0.00 17.43 0.00 12.17 0.00 3.97 312.54 0.00 0.29 9.90
sdg 349.20 0.00 104.06 0.00 66.60 0.00 16.02 0.00 11.77 0.00 3.94 305.14 0.00 0.29 10.04
dm-0 0.00 0.80 0.00 0.01 0.00 0.00 0.00 0.00 0.00 1661.50 1.71 0.00 12.00 1.25 0.10
dm-1 38.80 42.20 0.15 0.16 0.00 0.00 0.00 0.00 936.60 2801.86 154.58 4.00 4.00 1.10 8.88
md1 292.60 0.00 111.79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 391.22 0.00 0.00 0.00
md0 951.80 0.00 382.39 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 411.40 0.00 0.00 0.00
md2 844.80 0.00 333.06 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 403.71 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Enquanto isso, o desempenho do servidor é péssimo. Cada pressionamento de tecla no SSH leva segundos para ser registrado, a área de trabalho GNOME praticamente não responde e os usuários relatam conexões perdidas. Eu mostraria os gráficos do Cockpit, mas o login expiraria. Limitar a largura de banda funciona perfeitamente, mas gostaria de desbloquear o resto. Então, como posso identificar o(s) gargalo(s)? Eu adoraria algumas sugestões!
Responder1
O culpado foi o sda, o disco magnético do CentOS. A maioria das evidências apontava para lá. Como alguém comentou (e parece ter excluído), os tempos de espera em sda, dm-0 e dm-1 parecem suspeitos. Com certeza, dm-0 (root) e dm-1 (swap) também estão em sda. Observando a execução do iotop, o gargalo parecia ser desencadeado por um rápido flash de atividade do Gnome seguido por kswapd (swap) obstruindo o funcionamento. Fechar o Gnome com um "init 3" trouxe uma melhoria definitiva, mas não há como uma máquina tão poderosa ser prejudicada por uma tela de login ociosa. A SMART também relata mais de 8.000 setores defeituosos no sda. Meu palpite é que muitos deles estão no espaço de troca, fazendo com que as trocas prejudiquem o sistema.
Uma ideia era mover o swap para outro disco, mas substituir o sda parecia mais prático. Iniciei um clone de disco com o CloneZilla, mas estava estimando 3 horas e uma nova instalação seria mais rápida, então optei por isso. Agora o servidor está funcionando perfeitamente! Aqui está uma captura de tela mostrando mais de 1300 arquivos transmitidos simultaneamente em 8 Gbps, de forma agradável e estável. Problema resolvido!