Un sitio Drupal constantemente tomando ~5 segundos para generar una página es casi siempre esperando en uno de estos:
- Base de datos
- Ejecución de PHP
- Solicitudes externas de HTTP
- Cache disabled/misconfigured
- 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 statusCheck:
- Cacheta de render
- Caché de página dinámica
- Página
Entonces inspeccione:
drush cget system.performanceSi 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.logUna sola consulta que toma varios segundos es común.
Perfil Drupal
Instalar módulos devel y perfilador:
composer require drupal/webprofilerWebProfiler 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.ymlBusca
twig.config:
debug: true
auto_reload: true
cache: falseLa producción debe ser
debug: false
auto_reload: false
cache: trueOPcache
Verificar:
php -i | grep opcache.enable
php -i | grep opcache.validate_timestampsLa producción usa típicamente
opcache.enable=1
opcache.validate_timestamps=0Xdebug
Check:
php -m | grep xdebugo
php -i | grep xdebug.modeSi 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:
EXPLAINBusca
- 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:showo
tail -f web/sites/default/files/php.logLas 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.