Depurando Limitação de IO

1

Eu tenho uma caixa do Fedora com algumas limitações de E / S severas que não tenho idéia de como depurar.

O servidor possui uma Controladora ARC-1130 ARC-1130 de 12 portas PCI-X para SATA RAID com 12 discos de 7200 RPM de 1,5 TB e um Controlador Ethernet Gigabit ASF 88E8050 PCI-E Ltd.

uname -a output: 2.6.32.11-99.fc12.x86_64 # 1 SMP seg 5 de abril 19:59:38 UTC 2010 x86_64 x86_64 x86_64 GNU / Linux

O servidor é um servidor de arquivos que executa o Nginx com o módulo de status de stub ativado, para que eu possa ver a quantidade atual de conexões. O problema se apresenta quando eu tenho um alto número de conexões simultâneas em um estado de escrita. Normalmente, por volta de 350, neste exato momento está em 590 e o servidor está quase inutilizável e preso em 230mbit / s.

Se eu rodar, paro e bato 1 para ver os usos do núcleo da CPU Eu tenho todos os 4 núcleos com cerca de 99% de espera, se eu rodar o iotop, os trabalhadores do nginx são os únicos processos que produzem qualquer carga de leitura, atualmente em torno de 25MB / s. Eu tenho cada um dos trabalhadores ligados ao seu próprio núcleo.

Inicialmente, percebi que eram apenas os discos que estavam sendo conectados. Mas eu executei verificações de fscheck e smartmontools e não encontrei erros. Também executei um teste da zona iozone que você pode ver o resultado aqui: link

Além disso, quando a quantidade de conexões é baixa, não tenho problemas em obter uma boa velocidade. Se eu passar pela rede local, ele atinge facilmente 60MB / s.

Neste momento eu apenas tentei colocar um arquivo em / dev / shm, então eu criei um link simbólico de um arquivo do diretório público para ele e usei o wget pela rede local e obtive apenas 50KB / s.

Além disso, se eu tentar cp / dev / shm / teste / root / test, copie rapidamente em torno de 740MB e depois diminui a velocidade HEAVILY. Mais uma vez com iotop relatando 99% iowait.

Não sei bem como descobrir quais são os problemas. Pode ser uma limitação de disco natural, mas o arquivo de / dev / shm deve ser transferido, então parece que há um limite de rede, mas tudo bem quando não há muitas conexões. Talvez seja um problema de pilha TCP, mas eu realmente não tenho idéia de como verificar isso.

Qualquer sugestão sobre como proceder com a depuração seria muito bem-vinda. Se informações adicionais forem necessárias, avise-me e tentarei obtê-las.

Obrigado.

    
por Martin Fjordvald 08.05.2010 / 20:57

1 resposta

1

O iotop é legal para ver quais processos estão criando o io, mas eu usaria o sar para alguns números mais específicos; O sar -d 10 6, por exemplo, fornecerá 10 segundos amostras em um período de um minuto, o que lhe dará muito mais detalhes sobre o desempenho do seu disco e se você realmente tem gargalos (lembre-se que aguardar / svctime pode ter impactos significativos no desempenho - eu vi tão pouco quanto 20ms svctimes tornar usável um servidor de banco de dados, uma vez que 20ms por IOP o banco de dados estava tentando fazer).

Além disso, configurar o sa1 do sar (em /etc/cron.d/sysstat) para coletar com mais frequência do que o padrão a cada dez minutos e obter um despejo completo das estatísticas em coletas durante períodos de maior movimento (sar -A -s 09 : 00: 00 -e 10:00:00) também fornecerá detalhes sobre o desempenho da rede e facilitará a correlação de comportamento de CPU, disco, rede e memória para procurar números desonestos.

(e sim, a rede pode aparecer como iowait)

    
por 08.05.2010 / 22:48