O que tudo contribui para o tempo de execução da página drupal?

17

Tenho um site que estou investigando que apresenta problemas importantes de desempenho. Usando o memcache, reduzi o número de consultas em número e tempo total de execução (de 3 segundos a 230 ms), mas o tempo de execução da página está me iludindo (estou (olhando para os valores gerados pelo devel) meu entendimento é que o tempo de execução da página = tempo necessário para a execução do php, portanto, instalei o APC e posso ver o php opcode sendo armazenado em cache e estatísticas mostrando resultados no painel de controle da APC (apc.php enviado com a APC), mas o tempo de execução da minha página não diminui. Então, acho que minha pergunta é dupla:

  • O que tudo contribui para (diminui a velocidade) o tempo de execução da página? É apenas um tempo necessário para executar o php?
  • Quais abordagens devo adotar para reduzir o tempo de execução da página. Eu tentei APC, mas não muita ajuda

O número de módulos PS usado neste site é enorme (168), mas agora não estou em posição de fazer essa recomendação, é mais como um incêndio na situação do buraco.

Edit: Saída da execução do xhprof na instância local (recomendado pelo mikeytown), isso parece loucura, acho que os resultados posteriores são causados ​​por problemas? As execuções diff para o mesmo URL têm uma diferença drástica e seu uso excessivo de recursos. Também não sei por que está mostrando valores que não são de hoje: | (Acabei de instalar o xhprof neste laptop)

Saída da execução do xhprof na instância local

Dipen
fonte

Respostas:

4

Obtenha uma cachegrind do seu site. xdebug ou xhprof pode gerar um. Isso informará quais funções estão demorando mais para serem executadas. Até você fazer isso, é um jogo ruim de adivinhação.

mikeytown2
fonte
Ei, obrigado pela sugestão. Acabei de executar o xhprof na minha versão de desenvolvimento local (laptop não no servidor) e vejo isso - picasaweb.google.com/lh/photo/… Isso é real? Quero dizer, é possível uma página consumir 750Mb de memória?
Dipen 18/03/11
Poderia ser por se debater? os dados perfilados posteriormente para o mesmo URL, se você olhar para o mesmo URL, consome muito menos recursos, mas uma execução diff mostra uma utilização completamente diferente e extrema dos recursos.
Dipen 18/03/11
1
Realmente depende, mas para 99,9% das configurações, se você estiver usando mais de 100 MB de RAM, algo está errado.
mikeytown2
Além do número de módulos, poderia haver algo mais errado? Não tenho certeza se os módulos podem ser removidos da produção imediatamente. Btw, no local eu estou usando nginx + php-fpm e na produção o site está usando alta velocidade com cgi rápido.
Dipen
1
Você precisa se aprofundar no cachegrind e listar quais funções estão consumindo o tempo todo. img715.imageshack.us/i/cgrindout.png
mikeytown2
1

EDIT: Eu li mal a postagem original. 168 módulos é muito, e 300 a 700ms de consultas SQL são enormes . Quanto mais módulos você usar, mais consultas serão assim que os módulos fizerem alguma.

Use o cache agressivo enquanto puder, armazene tudo em cache, se não for suficiente, tente um cache proxy reverso. O uso de uma CDN para arquivos pode melhorar bastante a coisa toda. Um cache de proxy reverso também pode ajudá-lo, removendo alguns cookies de autenticação ao acessar páginas que não precisam dele (o núcleo achará que o usuário é anônimo para isso e maximizará o cache).


O dinamismo do núcleo do Drupal torna o amanhecer lento, assim que você tem muitos módulos interagindo ao mesmo tempo.

Eu diria, por exemplo, se você usar muitos módulos que carregam dados no tempo hook_node_load () em vez de usar campos, ele fará muitas consultas enquanto o uso do campo garantiria a eficiência do cache.

A renderização também pode levar muito tempo, drupal_render () (a API de renderização que algumas vezes é chamada) é uma boa peça de API (realmente útil), mas também um pouco lenta. Mudar para o PDO (D7) e o DBTNG completo (o que é ótimo, a propósito) também adiciona latência não negligenciável.

Dito isto, o núcleo por si só é bastante rápido (mas faz muitas consultas SQL, mesmo com quase nada instalado), módulos mal codificados geralmente são o gargalo.

A APC pode dividir o tempo de execução por 2 ou 3, dependendo do código que é executado. se você configurá-lo bem (habilite todas as otimizações da APC, o manual oficial da APC será bem escrito e o guiará).

Se você estiver em uma caixa com um sistema de arquivos lento (sistema de arquivos de rede ou disco rígido lento), isso pode implicar um impacto visível no tempo de execução. O Drupal é criado a partir de muitos arquivos pequenos, o que força o PHP a fazer E / S no FS toda vez que carrega um deles (a APC também ajuda muito nisso).

Um DBMS mal configurado também pode ser um gargalo feio, se você estiver usando o MySQL, pense em fazer um ajuste fino. Se você estiver em uma hospedagem compartilhada, se não for específico (ou pronto), a pilha DBMS e PHP do Drupal provavelmente será configurada incorretamente ou não ajustada, o que pode levar a sites muito lentos.

Não se esqueça de ativar todos os caches. Se o seu site não estiver orientado para o usuário autenticado, ative o cache agressivo da página (é realmente incrível).

Quanto mais você tiver blocos, mais páginas inteiras serão lentas, os blocos do módulo Views serão um gargalo (dependendo dos plug-ins do Views que você usa, o bloco do OG pode ser uma verdadeira dor de cabeça) se você não restringir sua visibilidade por página ou com código PHP personalizado (qualquer outro bloco também, sempre defina sua visibilidade manualmente, ajuda muito a estrutura, evitando que ela tente renderizar blocos vazios).

Evite que os módulos que usam hook_init (), hook_init () estejam sendo executados em todas as páginas, mesmo se você obtiver um 403 ou um 404, o que atrasa tudo (até diminui o tempo de geração do estilo imagecache | e erros 404 nos arquivos amanhecer devagar só para dizer que o arquivo não existe).

Pierre
fonte
Olá, aqui, quando digo o tempo de execução da página, quero dizer o valor que é mostrado pelo módulo devel na parte inferior da página e não usá-lo no sentido geral do ciclo de solicitação / resposta drupal, que também inclui consultas SQL etc. Minha pergunta é no contexto do usuário autenticado. Então, quando o devel relata o tempo de execução da página, ele também inclui consultas sql?
Dipen 18/03/11
Não tenho certeza se o sistema de arquivos seria um gargalo, pois estou no sistema de arquivos linux de 15k RPM. As consultas SQL demoram cerca de 300 a 700ms, dependendo da página, mas o tempo de execução da página é de aproximadamente 3 segundos (relatado pelo devel). Não tenho certeza do que mais poderia ser o problema.
Dipen 18/03/11
Desculpe, eu li mal sua postagem original. O valor de Devel é calculado da inicialização ao desligamento (o módulo devel possui seu próprio manipulador de desligamento PHP para fazer várias coisas, incluindo isso). Não sei exatamente quando é que ele inicia e para, mas praticamente todo o tempo de criação da página Drupal e as especificações comerciais estão incluídas nesse tempo de execução da página. Sim, inclui tudo (incluindo o tempo e a latência da consulta SQL) e sua própria latência (o desenvolvimento do log de consultas também afeta o desempenho).
314 Pierre