Como eu melhoro o desempenho do meu site Drupal com muitos usuários simultâneos?

2

Eu tenho um site do Drupal que pode receber uma taxa de acerto muito alta no lançamento. Nós alugamos um servidor muito robusto para o lançamento inicial, após o qual diminuiremos o nível. O servidor tem processador Xeon E5-2670 de 8 núcleos a 2.6ghz e 30gb de RAM.

O MySQL recebeu toneladas de memória, e eu confirmei que o MySQL está realmente usando essa memória através de "top":

innodb_buffer_pool_size = 15G

PHP recebeu toneladas de memória (quase certamente muito agora que eu notei o comentário dizendo "por script"):

memory_limit = 6000M

A configuração do Apache é o padrão pronto para uso:

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000

Estou executando o teste do JMeter (basicamente "lance o máximo possível de threads no site e solicite páginas o mais rápido possível") e posso ver o desempenho caindo conforme o número de usuários simultâneos aumenta:

  • 5 usuários: ~ 1s tempo médio de resposta
  • 10 usuários: tempo de resposta médio de ~ 1,3s
  • 20 usuários: tempo de resposta médio de 2,5 segundos

No entanto, a carga na máquina ainda é muito baixa. Durante o teste, o "top" reporta 26gb de memória livre, e a média de carga do "uptime" não ultrapassa 0,63. Minha suspeita é que ainda temos muitos recursos que poderíamos usar no desempenho, mas o Apache não está fazendo uso total desses recursos. Dito isso, sou um desenvolvedor e não um administrador de sistemas, e não sou especialista em desempenho de servidores.

Qual é a melhor melhoria que posso fazer para melhorar o desempenho?

    
por George 23.04.2013 / 03:07

3 respostas

7

Respostas do Drupal podem ser mais adequadas para essa pergunta, mas aqui estão algumas coisas para você:

  • Use o armazenamento em cache no Drupal E no servidor o máximo possível.
  • SE a maior parte do seu tráfego for anônima, considere usar um proxy reverso, como Verniz . Há um módulo que ajuda o Drupal a aproveitar melhor o verniz. Use-o se você decidir implementar o verniz.
  • Procure usar algo como memcache também.
  • Se o seu site Drupal estiver compilado no Drupal 6, considere converter seu código Drupal bruto em um site Pressflow Drupal (é fácil). O Pressflow incorpora muitas otimizações de desempenho (mas é um ponto discutível se você estiver executando o Drupal 7).

Agora, para o Apache ... não use uma configuração Apache pronta para usar. Você precisa ajustar o Apache para o seu site. Supondo que você esteja usando mod_prefork (eu diria que é bastante provável, mas só você pode determinar isso) Aqui está o básico de como isso é feito, mas você deve contratar alguém que saiba o que está fazendo.

  • Calcule a quantidade máxima de memória que você deseja que o Apache possa usar.
  • Teste intensamente seu website e determine a quantidade de memória que cada processo do Apache usa (usando top ).
  • Considere o processo do Apache que usa a maior parte da memória, adicione um pouco a ele e depois divida seu primeiro número (a quantidade máxima de memória que você deseja que o Apache use) por esse novo número.
  • O número que você recebe deve ser seu MaxClients & ServerLimit variables.

Esta certamente não é a resposta final. Ajustar seu servidor leva tempo e requer experiência para acertar. Boa sorte.

    
por 23.04.2013 / 03:43
1

Existem alguns módulos por aí (Boost, Varnish etc.) que podem ajudá-lo a impulsionar as coisas se você tiver usuários anônimos. No entanto, eles não ajudarão muito se os usuários criarem perfis em seu site e fizerem login.

É assim que eu configuro os servidores para o Drupal:

  • Desative o módulo do Update Manager. Isso atrasa seu site.
  • Eu substituí o Apache por Nginx e phpfpm. Você provavelmente precisa configurar e configurar isso sozinho. Mesmo que eu não tenha feito nenhum benchmark "formal", minha impressão é que o Nginx + phpfpm atende solicitações mais rapidamente. Aqui está uma configuração para o Nginx e o Drupal.
  • Otimize as tabelas MySQL e InnoDB. Veja o Blog de desempenho do MySQL .

Pode haver pequenas melhorias que podem levar as coisas adiante, mas acho que isso pode ser pelo menos um ponto de partida para as coisas.

    
por 29.08.2013 / 11:17
0

Armazene todas as páginas estáticas, páginas, menus e hiperlinks usados com frequência usando uma ferramenta de pagamento como memcache. Problema com o Drupal é que ele faz muito acesso ao banco de dados para cada carregamento de página e recarrega todas as páginas completamente.

    
por 30.04.2013 / 20:42