Criação de perfil do servidor Apache + Mysql + Php - qual é o gargalo?

7

Como faço o perfil de um servidor Linux + Apache + Mysql + Php para velocidade?

Eu tenho um servidor com uma instância do MediaWiki altamente modificada em execução no Ubuntu 8.04. É um pouco lento - eu não fiz nada para otimizá-lo ainda, então eu tenho certeza que há muitas coisas fáceis para torná-lo um pouco mais rápido.

Mas, para otimizar, você precisa avaliar primeiro. Como faço para descobrir qual dos componentes (Apache, Php, Mysql) ocupa o maior espaço de tempo para servir uma página?

    
por amarillion 14.05.2009 / 14:54

4 respostas

9

Bem, quando seu perfil é algo assim para encontrar o gargalo, você precisa eliminar as coisas uma a uma. Você precisará de uma linha de base para obter comparações. Se você tem a ferramenta "ab" instalada (ela vem com o apache), você pode usar isso.

Para obter sua linha de base, recomendo obter a média de pelo menos algumas centenas de solicitações. Aqui está um exemplo:

$ ab -n 400 http://yousite/

Analise os resultados para a linha "Tempo por solicitação", algo parecido com:

Time per request:       96.031 [ms] (mean)

Anote esse tempo, pois esta é a linha de base.

Para descartar o apache como o culpado, faça uma página estática no seu servidor (apenas salve o html de uma página que você considera lenta / lenta) e execute o ab nela novamente.

Jogue algum PHP na página estática. Não tem que ser uma grande quantidade dele, mas deve estar realmente fazendo algum trabalho. O MediaWiki é um código muito bom, então, se houver um afunilamento do PHP em seu sistema, meu dinheiro estaria no carregamento real da pilha do PHP na memória e executaria o teste novamente.

Veja os três números e veja onde o maior salto está entre o próximo passo. Minha aposta seria no MySQL ser o mais lento dos três, mas pode muito bem ser que você esteja carregando muitas imagens em uma página que está reduzindo o tempo total da requisição, caso em que você pode querer repensar o design do MySQL. página.

    
por 14.05.2009 / 15:42
2

Zombat e Frank Farmer tem algumas boas sugestões (eu gosto da sugestão de consulta lenta, eu mesmo) em Stack Overflow 697802 . O ab para o apache também é bastante útil para testar as alterações que você faz.

    
por 14.05.2009 / 15:15
2

Executamos uma boa instalação do MediaWiki e percebemos rapidamente que o MediaWiki se beneficia muito de ter uma instância do memcached. Caso contrário, ele precisa carregar muitos arquivos de idiomas e dados do usuário em todas as solicitações.

    
por 14.05.2009 / 17:58
2

Também extremamente importante é a configuração do módulo prefork .. eu reduzi drasticamente os números na seção específica do /etc/apache2/apache2.conf .. desde então eu tive latência massiva, onde a página seria paralisada até um minuto antes de terminar o carregamento ... rastreamento com os módulos de rastreio e de desenvolvimento do drupal, assim como o perfil com xdebug me deixou sem noção ... eu configurei o APC e modifiquei o MYSQL conf, mas o culpado realmente eram os valores pequenos demais para o módulo prefork. Eu levantei aqueles para um nível moderado e suficiente e agora o servidor está de volta a um raio rápido. Fique atento a esses números, se você tiver inexplicáveis tempos altos de execução de páginas ...

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
# original values:
#    MaxSpareServers      10
#    MaxClients          150
# far too conservative experimental values:
#    MaxSpareServers       5
#    MaxClients            5
# good compromise:
    MaxSpareServers       10
    MaxClients            20
    MaxRequestsPerChild   0
</IfModule>

Estes valores são para um ambiente de host virtual com 512MiB de RAM + 256MiB de swap. Boa sorte em encontrar o servidor ideal;)

    
por 27.07.2009 / 13:44