Demora do servidor Ubuntu 10.04 quando POST para mySQL

0

Eu tenho um servidor Ubuntu 10.04 e, por algum motivo, ele sempre parece exibir um atraso intermitente sempre que executa operações CRUD no banco de dados mySQL. A maioria dos comandos Post é executada dentro de uma quantidade normal de milissegundos, mas quando há um atraso, parece ser sempre de 4,5 segundos. Este não é um servidor público ocupado, portanto, não deve ser uma questão de carga do servidor ser o problema. A melhor maneira de você entender o que estou tentando explicar é para eu te mostrar. Portanto, sem mais demora, dê uma olhada rápida nesses vídeos curtos:

video 1
video 2

Alguém pode me dar alguma ideia de por que isso está acontecendo e o que tentar resolver?

    
por DanielAttard 31.01.2013 / 15:14

1 resposta

2
Como eu mencionei nos comentários, não vejo razão para acreditar que o MySQL é o gargalo aqui, mas eu acho que a configuração do servidor web pode causar isso.

A instalação de um LAMP regular feito por exemplo por apt-get install lamp-server^ instalará o PHP como um módulo do Apache e puxará o MPM prefork . Por padrão, isso só começa com um número limitado de trabalhadores (garfos) para lidar com conexões de entrada. Quaisquer novas conexões simplesmente não serão processadas (embora não sejam recusadas). Então, acho que o que você está vendo é simplesmente que o "pool" de trabalhadores é pequeno para lidar com todas as conexões.

Um erro semelhante a este provavelmente estará em seus logs de erro do Apache em algum lugar ao atingir esse limite:

[error] server reached MaxClients setting, consider raising the MaxClients setting

Para configurar o prefork MPM no Apache, você pode ver os valores atuais em /etc/apache2/apache2.conf :

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

Para alterar isso, recomendamos criar um novo arquivo em /etc/apache2/conf.d , por exemplo, prefork-mpm-tuning.conf e apenas "sobrecarregar" as configurações de seus padrões (e reinicie o Apache):

<IfModule mpm_prefork_module>
    StartServers          20      # |-- important to increase
    MinSpareServers       20      # |
    MaxSpareServers       50
    MaxClients           70       # too high will get you out-of-memory here
    MaxRequestsPerChild   0
</IfModule>

Nota importante aqui é que o Apache só escala por segundo, começando com apenas um (codificado, não configurável) e nunca diminui a escala a menos que você o configure explicitamente. Conforme explicado na documentação do Apache sobre ajuste de desempenho :

% bl0ck_qu0te%

Enquanto o último parágrafo pode se aplicar a casos gerais, acho muito confuso testar que o Apache pareça não responder após a reinicialização. Por esse motivo, minha recomendação é para aumentar a configuração StartServers .

Então, para resumir:

  • Provavelmente você deseja aumentar o StartServers para aceitar todas as conexões subseqüentes disparadas dos clientes. O MPM prefork do Apache não é um operador muito dinâmico - para que ele tenha um bom desempenho com muitas conexões simultâneas, você precisará simplesmente começar muito.
  • Permitir que aloque memória suficiente (aproximadamente 20 MB por garfo na prática). Sim, você precisará de um monte de coisas apenas para atender 100 visitantes simultâneos nesse design. (olhe para o PHP-FPM se você precisar de mais desempenho com menos memória)
  • Limite o MaxClients para impedir que o Apache reivindique toda a memória do servidor e a trave. Faça matemática e teste aqui.
  • Configurar StartServers muito baixo para economizar memória enquanto mantém um MaxClients maior é uma coisa ruim: seu site parecerá ser lento por um motivo por segundo e o uso da memória aumentará mais tarde de qualquer maneira. Isso acontecerá então.

Referências:

por gertvdijk 31.01.2013 / 17:36