Magento2 lento, velocidad de carga y diversos errores

Gestiono una tienda online realizada con Magento2, y en la última semana actualicé a Magento 2.2 y tuve unos problemas de velocidad de carga bastante graves.

Me pasaba que al cabo de unas horas empezaba a tardar en cargar más de 5 segundos la página, y con el tiempo dejaba de funcionar. Miré el servidor y tenía la CPU al 100%. Era un proceso de MYSQL aproximadamente al 50%, y unos cuantos más de PHP. Por lo que lo primero que hice fue reiniciarlo, pero seguía igual. Borré caché, miré si era algún modulo. Nada. Miré logs de MYSQL, Apache, Magento2, etc.. Cambié de caché a Redis. Nada

Hasta que empecé a pensar que era Cron, porque ya no funcionaban las tareas repetitivas, por lo que me puse a investigar y bajé la frecuencia a Cron para que se ejecutara cada 3 minutos. Bajaron el numero de procesos PHP en background, y esto parecía mejorar un poco, pero no era la solución.
Entonces miré la base de datos y efectivamente, tenía en cola 65.000 tareas de Cron pendientes, por lo que al intentar ejecutarlas al tiempo no respondía el servidor.

Solución: en la base de datos de Magento “truncate cron_schedule;
Esta sentencia SQL borra la tabla de tareas pendientes de Cron y al rato se regenera de nuevo. Se crearon 265 tareas, que se ejecutaban cada minuto correctamente.

Bajón del uso del procesador en cuanto encontré la solución:

A todo esto Google mientras tanto me seguía indexando, pero como mi Web iba tan lenta, le costaba tanto que hace pensar que me penalizará unos días, aunque de momento la estadística de paginas indexadas no ha disminuido. Quizás haya entendido que es un error temporal.

Velocidad de carga de mi web según Google esos días. Antes de los errores tenía 462 ms, que es un valor normal, y luego los picos que son de 5000 ms.

Y aquí los errores de rastreo:

Otro error que conseguí solucionar fue “Your web server is set up incorrectly and allows unauthorized access to sensitive files. Please contact your hosting provider
Resulta que en la carpeta de Magento /app hay un fichero .htaccess negando el acceso al directorio con el texto: “Order deny,allow Deny from all”
Y hay un proceso en Magento que constantemente hace una petición a ese fichero para comprobar que el servidor no responde. El primer problema es que esa sintaxis es de Apache2.2, (en Apache2.4 es Require all denied), y el segundo que fue el que tuve yo, es que si utilizas PHP-FPM ignora los ficheros .htaccess.

Solución: En tu fichero de Apache *.conf, si utilizas PHP-FPM, encima de la directiva ProxyPassMatch tienes que utilizar la directiva “ProxyPass /carpeta !” para evitar accesos a ficheros sensibles.
En este caso tal que:
ProxyPass /app !
ProxyPassMatch ^/(.*\.php(/.*)?)$ ……….

Intentaré poner en esta entrada más errores que vaya encontrando, como solucionarlos y algunos trucos más de Magento2.