Como rastrear um botleneck ligado a io

2

Atualmente estou trabalhando na otimização de um servidor web, no entanto estou bastante preso a um problema específico. Estou usando o jmeter para simular a carga simulada. O jmeter é configurado da seguinte maneira:

  • 400 threads
  • Acelerar 30 segundos
  • Contagem de loops 1
  • Cada thread visita 17 páginas diferentes no servidor com um atraso de 1 a 5 segundos entre cada solicitação.

O que estou experimentando é que, até 350 threads, tudo parece estar funcionando como deveria. A carga e o uso da CPU aumentam, o site se torna mais perceptível, mas é até utilizável.

Em algum lugar entre 350 a 400 threads, no entanto, algo acontece. A carga cai para quase nada , o cpu está inativo em torno de 75 - 85% e o site trava por vários minutos para todos.

O que eu descartei:

  • O servidor não troca, pelo menos não aparece nos gráficos top e collectd.
  • Não há consultas do MySQL que estão aguardando para terminar (conforme relatado pelo MySQL Administrator). Embora eu esteja vendo muitas conexões abertas.
  • max_connections no MySQL é 1600 (1 conexão do MySQL por solicitação, portanto esse limite está longe de ser alcançado)
  • a espera é por assim dizer inexistente em gráficos da cpu (collectd)
  • Estamos usando o memcached, mas o tempo limite está definido para 1 segundo.
  • o memcached é executado no mesmo servidor, portanto, a latência da rede não deve ser um problema.
  • MaxClients e ServerLimit não são alcançados no apache

Estou ficando sem ideias de como rastrear esse problema. Alguma dica, truque ou ideia para ajudar a fixar o motivo?

Obrigado

    
por Morits 23.02.2011 / 10:19

1 resposta

1

Você deve verificar o máximo de descritores de arquivos abertos permitidos para cada programa em execução.

Você pode ver esse limite com ulimit -n e modificar o comportamento padrão no arquivo /etc/security/limits.conf .

Se você permitiu que 2000 clientes se conectassem ao MySQL, mas apenas 1024 (o limite padrão) descritores de arquivos pudessem ser abertos (soquetes de rede são incluídos), ele parará de responder a novas conexões sem aviso prévio.

    
por 23.02.2011 / 11:24