ti-enxame.com

Profiling Apache + MySQL + PHP Server - Qual é o gargalo?

Como faço perfil um servidor Linux + Apache + MySQL + PHP para velocidade?

Eu tenho um servidor com uma instância mediawiki fortemente modificada em execução no Ubuntu 8.04. É um pouco lento - eu não fiz nada para otimizar ainda, então tenho certeza que há muita fruta baixa para torná-lo um pouco mais rápido.

Mas para otimizar você precisa medir primeiro. Como faço para descobrir quais dos componentes (apache, php, mysql) ocupam o maior pedaço de tempo para servir uma página?

7
amarillion

Bem, quando seu perfil algo parecido com isso para encontrar o gargalo, você precisa governar as coisas uma por uma. Você precisará de uma linha de base para obter comparações contra. Se você tiver a ferramenta "AB" instalada (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 pedidos. Aqui está um exemplo:

$ ab -n 400 http://yousite/

Olhe através dos resultados para a linha de "tempo por solicitação", vai parecer algo como:

Time per request:       96.031 [ms] (mean)

Anote esse tempo como esta é a linha de base.

Para descartar o Apache como o culpado faz uma página estática no seu servidor (basta salvar o HTML de uma página que você considera lento/lento) e execute ab contra ele novamente.

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

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

10
TrueDuality

Executamos uma boa instalação do MídiaWiki e notamos rapidamente que o MediaWiki se beneficia muito de ter uma instância memcachada. Caso contrário, ele deve carregar muitos arquivos de idioma e dados do usuário em todas as solicitações.

3
Cody Caughlan

Também é extremamente importante é a configuração do módulo de pré-trabalho. Eu reduzi drasticamente os números na seção específica de /etc/apache2/apache2.conf. Desde então, eu tinha latência maciça, onde a página estaria parando por um minuto Antes de terminar o carregamento ... Rastreamento com módulos de traço e desenvolve do Drupal, ASWELL como perfil com Xdebug deixou-me sem noção. Eu configuro a APC e moddei o MySQL CONF, mas o culpado na verdade era os valores muito pequenos para o módulo de pré-trabalho. Eu levantei Aqueles a um nível moderado e suficiente e agora o servidor está de volta ao relâmpago rápido. Cuidado com esses números se você tiver tempos de execução inexplicáveis ​​de alta página ....

<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>

Esses valores são para um ambiente de host virtual com 512MIB RAM + 256MIB SWAP .. Boa sorte encontrar o seu servidor otimizado;)

2
eMPee584

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

2
vinny