Cómo solucionar problemas un sitio drupal tomando 5 segundos para cargar

Read this article in:

Un sitio Drupal constantemente tomando ~5 segundos para generar una página es casi siempre esperando en uno de estos:

  1. Base de datos
  2. Ejecución de PHP
  3. Solicitudes externas de HTTP
  4. Cache disabled/misconfigured
  5. Código personalizado lento

Primero, vamos a determinar si es capa de transporte o el backend. Desde el servidor:

curl -o /dev/null -s -w \
'connect: %{time_connect}\nstarttransfer: %{time_starttransfer}\ntotal: %{time_total}\n' \
https://example.com

Si time_starttransfer es alrededor de 5 segundos, el backend es lento.

¿Está funcionando Drupal Cache?
drush status

Check:

  • Cacheta de render
  • Caché de página dinámica
  • Página

Entonces inspeccione:

drush cget system.performance

Si ha iniciado sesión, el cache de página no ayudará, pero el renderizado y el caché de página dinámico deben.

Activación de la base de datos

Si MySQL/MariaDB:

SHOW FULL PROCESSLIST;

mientras cargas una página.

O permitir el lento registro de consultas:

SET GLOBAL slow_query_log=1;
SET GLOBAL long_query_time=0.2;

Entonces inspeccione:

/var/lib/mysql/*-slow.log

Una sola consulta que toma varios segundos es común.

Perfil Drupal

Instalar módulos devel y perfilador:

composer require drupal/webprofiler

WebProfiler mostrará

  • routing
  • twig
  • SQL
  • servicios
  • ganchos
  • Tiempo de entrega

Normalmente verás inmediatamente al culpable.

Consulte las solicitudes de HTTP

Una llamada olvidada puede costar 5 segundos.

Buscar:

grep -R "http" web/modules/custom
grep -R "curl" web/modules/custom
grep -R "Guzzle" web/modules/custom
grep -R "file_get_contents(" web/modules/custom

Cualquier contacto con otro servidor durante la generación de páginas es sospechoso.

Check cache backend

Si utiliza caché de la base de datos:

drush ev "print_r(\Drupal::service('cache.default'));"

Redis es dramáticamente más rápido en sitios ocupados.

Asegúrese de desactivar el depuro de Twig

Configuración de desarrollo fácilmente añadir segundos. Check:

development.services.yml

Busca

twig.config:
  debug: true
  auto_reload: true
  cache: false

La producción debe ser

debug: false
auto_reload: false
cache: true
OPcache

Verificar:

php -i | grep opcache.enable
php -i | grep opcache.validate_timestamps

La producción usa típicamente

opcache.enable=1
opcache.validate_timestamps=0
Xdebug

Check:

php -m | grep xdebug

o

php -i | grep xdebug.mode

Si está habilitado, desactivarlo.

Medición de la cuenta SQL

Activar registro de consultas:

$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';

o usar WebProfiler.

Una página de caché normal es a menudo:

  • 20–80 consultas SQL

Varias cientos de consultas indican un problema.

Identificar ganchos caros

Buscar módulos personalizados para

hook_page_attachments()
hook_preprocess_page()
hook_preprocess_node()
hook_entity_view()
hook_views_pre_render()
hook_views_query_alter()

Estos frecuentemente presentan retrasos.

Check Views

Una vista grande puede consumir los 5 segundos enteros.

Activar la vista SQL en la vista y ejecutar:

EXPLAIN

Busca

  • Uso temporal
  • Utilizando filesort
  • escaneos de mesa completos
Medir PHP

Instala XHProf, Tideways o Blackfire.

Un gráfico de llama identifica inmediatamente dónde se gasta el tiempo de ejecución.

Compruebe los registros
drush watchdog:show

o

tail -f web/sites/default/files/php.log

Las advertencias repetidas pueden retrasar significativamente la generación de páginas.

Benchmark sin Drupal

Crear un archivo PHP simple:

<?php
echo "hello";

Compare:

time curl https://example.com/test.php
time curl https://example.com/

Si test.php es rápido y Drupal es lento, el problema está en Drupal en lugar de PHP, el servidor web, o TLS.

Please login to post comments: