View Categories

Optimizar wp-cron.php si consume demasiada memoria y CPU

WordPress comenzó su vida como una simple aplicación de blogs, pero ha crecido y desarrollado a un ritmo casi exponencial en los últimos años. Se ha convertido quizás en el CMS más popular del planeta, impulsando millones de sitios web.

Es muy extensible, permitiendo que los temas y complementos brinden casi cualquier funcionalidad que desee. Sigue siendo la mejor plataforma de blogs, pero ahora funciona increíblemente bien como una plataforma normal de CMS, CRS o comercio electrónico.

¿Para que sirve wp-cron.php? #

wp-cron.php es un script que realiza las tareas de mantenimiento periódico que WordPress debe hacer. Esto puede incluir:

  • Programar publicaciones para que aparezcan en el futuro
  • Notificaciones por correo electrónico de nuevos comentarios u otros eventos
  • Ejecución de plugins como Akismet para filtrar comentarios por spam

¿Cuál es el problema con wp-cron.php? #

En un sitio web pequeño con unas pocas páginas y unos cientos de visitantes al día, wp-cron.php no es un problema, pero imagine un sitio web más grande con quizás 100 visitantes por hora. Si cada visitante lee su página de inicio, y luego 2 más lo hacen simultáneamente, eso significaría que se ejecuta wp-cron.php 300 veces por hora, 7200 veces por día, etc. Además, en un sitio web ocupado/grande, wp-cron.php puede tardar unos minutos en ejecutarse.

¡Hemos visto algunos sitios con tráfico considerable que ejecutan múltiples instancias de wp-cron.php que consumen más de 200Mb de memoria virtual cada una! Esto agotará rápidamente la asignación de memoria permitida de sus cuentas de cPanel, es decir, si todavía no ha agotado su asignación de CPU. Esto puede hacer que su sitio web no funcione correctamente.

Cómo detener wp-cron.php #

¡Lo primero que debemos hacer es evitar que WordPress ejecute wp-cron.php cuando lo desee! Afortunadamente, esto no requiere más que ingresar una línea adicional en el archivo wp-config.php, que se puede encontrar en el directorio base de su instalación de WordPress.

Simplemente agregue esta línea en la parte superior (justo después de la etiqueta <? php) o en la parte inferior del archivo:

define('DISABLE_WP_CRON', true);

Esto impedirá que wp-cron.php sea llamado por WordPress.

El siguiente paso es configurar alguna forma de ejecutar el script manualmente en un intervalo regular. La forma de hacerlo es mediante la creación de un cron job (que se puede hacer fácilmente usando el icono de Cron Jobs en el Panel de Control cPanel).

Una vez que haya decidido con qué frecuencia ejecutar su cron job, el comando para ingresar será:

/usr/bin/wget -O /dev/null http://dominio.com/wp-cron.php?doing_wp_cron

Obviamente, reemplace «midominio.com» con la dirección de su propio sitio web.

¿Con qué frecuencia se debe ejecutar wp-cron.php? #

Para responder a esto debe considerar ¿Con qué frecuencia actualiza su sitio web?

Como regla general, si solo revisa su sitio web una vez al día, ejecute wp-cron.php una vez al día. Si descubre que recibe MUCHOS comentarios de spam y Akismet no se mantiene al tanto, entonces puedes configurarlo cada 6 horas más o menos.

Recuerde que…

Por regla general, el tiempo mínimo de ejecución no debe ser menor a 30 minutos como máximo.