Otimize o desempenho do Apache

Otimize o desempenho do Apache

Estou procurando maneiras de otimizar nosso servidor web atual hospedado internamente. Estou tentando fornecer o máximorelevanteInformação abaixo. Por favor, deixe-me saber se você precisa de informações adicionais para ajudar.

O servidor está executando um único site, que é uma plataforma online de pedidos de pizza construída no Zend Framework (ver1). Nas estatísticas de tráfego do último mês, aproximadamente 6.000 carregamentos de página por dia, concentrados principalmente na hora do jantar. Cerca de 1.500 picos de carga/hora nesse período.

Recentemente, atualizamos de uma linha ADSL de 2/2 mbit para fibra de 100/100 mbit e ainda temos problemas de desempenho na hora do jantar. Presumimos que o problema era 2mbit. O site é bastante ágil em períodos de baixa carga.

Hardware

CPU: Intel(R) Xeon(R) CPU            5160  @ 3.00GHz (3000.13-MHz K8-class CPU)

Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)

Filesystem   Type     Size    Used   Avail Capacity  Mounted on
/dev/ad7s1a  ufs      4.8G    768M    3.7G    17%    /
devfs        devfs    1.0K    1.0K      0B   100%    /dev
/dev/ad7s1g  ufs      176G    5.2G    157G     3%    /home
/dev/ad7s1e  ufs      4.8G    2.8M    4.5G     0%    /tmp
/dev/ad7s1f  ufs       19G    3.5G     14G    19%    /usr
/dev/ad7s1d  ufs      4.8G    550M    3.9G    12%    /var

SO do servidor

FreeBSD 8.2-RELEASE

Programas

apache-2.2.17
php5-5.3.8
mysql-server-5.5

Pegada Apache(exemplo, retirado de # top)

31140 www              1  45    0   377M 41588K lockf   2   0:00  0.00% httpd
31122 www              1  44    0   375M 35416K lockf   2   0:00  0.00% httpd
31109 www              1  44    0   375M 38188K lockf   2   0:00  0.00% httpd
31113 www              1  44    0   375M 35188K lockf   2   0:00  0.00% httpd

O Apache está usando o pré-fork MPM, APC (Alternative PHP Cache). O módulo SSL é carregado, mas não utilizado (como na verdade não funciona, portanto não é usado). Existe um arquivo contendo configurações para módulos MPM, mas como vejo que não está incluído no arquivo httpd.conf, a linha de inclusão está comentada. Portanto, eu acho que o MPM pré-fork também está funcionando com valores padrão.

Aqui estão alguns outros valores conf do Apache que encontrei - que estão incluídos em https.conf

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

Carregar ao enfrentar problemas de desempenho

insira a descrição da imagem aqui

Observação: solicitações de API para back-end

Quanto à nossa plataforma online, ela se comunica com nosso sistema backend através de uma API (GET/POST). Para cotações de preços em cestas (armazenadas em cache até a adição de novo item), produtos (armazenadas em cache), preços de produtos (armazenadas em cache). E o servidor back-end está realmente mostrando carga real ao ver problemas de desempenho na web. Então, estou mais convencido de que são as solicitações de API que estão demorando uma eternidade para serem concluídas, prendendo assim os clientes no servidor web. Então, minha pergunta é: as estatísticas fornecidas acima (tráfego/carga) e a configuração atual do software. Comparado com as especificações da conexão à Internet e do hardware, isso é sinal de um servidor estressado? E eu seria capaz de aumentar o número máximo de clientes no servidor web, com base nos recursos disponíveis e na área ocupada real do Apache?

Responder1

O desempenho do site é um assunto importante. Pelo que vejo, o problema provavelmente não é o Apache.

Existem algumas coisas que podem ajudá-lo a melhorar seu desempenho.

  • Cache! Não sei quanto você armazena em cache no seu código PHP. Mas como você não está usando SSL e acho que tem muitos dados somente leitura, tenteVerniz

  • Habilitarmod_expira

  • Crie o perfil do seu site/API de back-end comJMeter

Responder2

Não, os itens acima não são sinais de um servidor estressado.

Embora você possa estar enfrentando saturação de E/S da rede (já que não fornece dados reais sobre ela), isso é extremamente improvável com tão poucas solicitações reais ocorrendo durante horários de pico.

Você precisa executar alguns testes no back-end HTTP para ver se ele está funcionando na capacidade máxima. Se for, então você precisa consertar ISSO.

Para referência futura, você deve configurar e usar ostatus do servidormanipulador para monitorar o Apache, conforme documentado aqui:http://httpd.apache.org/docs/2.2/mod/mod_status.html

Responder3

O desempenho do Apache pode ser ajustado com as configurações do Worker MPM e do Prefork, alterar o keepalive e o máximo de threads sobressalentes pode ajudar no aumento do desempenho e no consumo de menos espaço de memória. Você pode encontrar a configuração ideal para o Prefork e o trabalhador emaqui

Responder4

Você pode estar ficando sem processos (definidos por MaxSpareServerse StartServers). O padrão é apenas 10, portanto, se seus tempos de resposta forem altos, isso pode não ser suficiente para uma solicitação a cada 2 segundos (1.500/hora).

Ligue o server-statusmódulo para monitorar os processos em uso.Certifique-se de definir regras de acesso para que sejam acessíveis apenas internamente.

informação relacionada