Hace casi un mes que vengo recibiendo notificaciones de Dreamhost por la sobrecarga de cpu que generan los sitios que tengo alojados en su servidor (no soy el único, ver technorati ).
Hace unos pocos días publicaba el ultimatum que me mandaron ya que según sus políticas, mi consumo diario de minutos de cpu debería estar dentro de los 30-40 minutos y en esta última semana alcancé los 359,76 minutos!
Me puse a investigar de donde venía semejante abuso uso del cpu…
Sobre este tema se ha hablado mucho, hasta el punto de sugerir que dreamhost trata de eliminarte una vez que alcanzas cierto número de visitas. En primer lugar me parece una estupidez ya que hay grandes sitios en dreamhost que nunca han tenido problemas, y por otro lado ninguno de los 9 sitios que administro recibe tantas visitas como para tirar abajo un server.
Por lo que definitivamente el problema era wordpress. Actualmente tengo 9 sitios funcionando en la misma cuenta de dreamhost, 6 de ellos corren wordpress . Además 3 de esos 6 son sitios que arrancaron con la versión 1.1 de wordpress y desde entonces han sido vítimas de múltiples actualizaciones, spam y demás cambios estructurales.
Me puse a revisar los logs de todos los sitios y me dí con el problema de que dreamhost, al correr php como cgi, no permite un detalle de cada script utilizado por lo tanto tampoco provee la información de los recursos usados por el mismo. Así que después de dar vueltas un rato se me prendió la lamparita, revisé mis estadísticas (awstats!) y en la sección ‘Accesos’ encontré lo que necesitaba.
Solución a la Sobrecarga del CPU
Finalmente logré solucionar el problema del consumo de minutos de cpu. Para lograrlo dividí las posibles causas en tres etapas.
En primer lugar desactivé todos los plugins para probarlos aisladamente y ver los resultados a nivel individual, luego revisé las solicitudes a la base de datos y por último activé el tan aclamado wp-cache.
Plugins
Actualmente estoy ultilizando aproximadamente unos 20-25 plugins distintos de acuerdo a las necesidades de cada uno de los sitios. Desactivé todos los plugins y los probé uno por uno. El resultado fue bastante satisfactorio ya que ninguno presentó anomalías, salvo el acronym-revisited que esstaba usando con algunas modificaciones propias. Así que lo desactivé por ahora.
Base de Datos
Como todos saben wordpress utiliza un base de datos para almacenar el contenido y es ahí donde está la raiz de todo el problema. Cada vez que una página es generada, se manda una solicitud a la base de datos, una vez encontrada la información la devuelve y es convertida a través de php en el archivo .html que leemos.
El problema está en que wordpress tiene algunas fallas a la hora de optimizar la información almacenada en la base de datos, por lo que esta se convierte literalmente en un desastre , entonces cada solicitud que se hace a la misma demora el doble o el triple de tiempo, aumentando por ende el uso del tiempo del procesador.
Solución: En primer lugar hacemos un backup, luego vamos a phpmyadmin, eleguimos la base de datos que contiene nuestra preciada información, cuando nos muestre la lista de tablas vamos abajo y le damos a Marcar todos/as y una ves que todas las tablas tiene el tilde, eleguimos del drop-down box (las opciones que se depliegan) la que lee Optimizar la tabla y listo. Este proceso puede demorar un ratito dependiendo de cuan afectada esta nuestra base de datos.
Si todo va bien, el mensaje nos va a decir por ejemplo:
wp_categories optimize status OK (Si la optimización fue exitosa)
wp_categories optimize status Table is already up to date (en caso de que la tabla ya estuviese correcta)
Generalmente el tamaño de la base de datos va a disminuir bastante, la mia perdió 1.42 MB, eso es normal ya que ese espacio era basura o estaba mal ordernado.
WP-Cache 2.0
WP-Cache 2.0 es un excelente plugin para wordpress que permite almacenar algunas de las páginas generadas de manera estática para asi reducir la cantidad de solicitudes mencionadas mas arriba.
Es muy útil si tu sitio tiene alguna página(s) enlazada desde múltiples sitios y recibe miles de visitas por día, o si alguna vez te nombran en slashdot por ejemplo.
Conclusión
Para concluir, vale decir que los plugins que utilizan filtros generan una sobrecarga (menor) en el cpu, ya que analizan todo el contenido de la página o sección filtrada para añadir, remover o modificar información.
Con respecto a la base de datos, wordpress tiende a almacenar información que puede no ser necesarias, como e el caso de lso comentarios marcados como spam. Es por eso que es necesario realizar un mantenimiento cada unos 15 días para asegurarse que todo marcha bien.
Por último, implementar WP-Cache es una buena forma de contribuir al alivio del procesador.
Resultados Globales
Antes de implementar los cambios (motivo del ultimatum).
Total of CPU seconds: 21612.3500 (360.20 minutos)
Desactivar los plugins que utilizan filtros de contenido.
Total of CPU seconds: 14071.2600 (234,52 minutos)
Optmizar la base de datos (acá el cambio es impresionante).
Total of CPU seconds: 2026.1500 (33.79 minutos !!)
Aplicar WP-Cache 2.0 (un empujoncito mas)
Total of CPU seconds: 1310.4500 (21.84 minutos!!!)
Espero que les sirva de ayuda a los que estén experimentando problemas similares con wordpress y sobre todo para los que están utilizando dreamhost para alojarlos.
Tags: WordPress
Yo tengo un reporte de 40 minutos, el limite de lo permitido. He desactivado el cgi como menciona LMXY… si todo sale bien, lo volveré a activar y voy a instalar el WP-Cache.
Lo que no me explico, es que como puedo tener un reporte de 40 minutos. Pero bueno, a ver que pasa.
Que tonto soy, creo que el nerviosismo de leer un 24000 me cegó
.
Yo estaba leyendo la nota: “CPU percentage assumes 24000 cpu seconds per day total.”
Pero mi total, son 430 segundos.
Menos mal, no leí bien
.
Muy buen artículo Marcos, realmente es un asco de ineficiente como WP hace las consultas poara generar cada página. El plugin Wp-Cache esta increible.
Buen trabajo con los benchmarking.
Está muy bien el artículo, están habiendo muchísimos casos de gente afectada por esto y creo que les va a venir de maravilla para aclarar posibles dudas que puedan tener; lo he leñido entero y está muy bien.
Un saludete.
Excelente tutorial marcos!
Es increible que hayas estado usando 359 minutos de cpu!, yo uso txp para los trabbajos que hago, pero tengo algunos clientes a los que le he instalado wordpress que estaban preocupados por la demora de carga de sus páginas, ya mismo lo estoy implementando!
Por cierto, a que te referías con plugins que utilizan filtros.
Drask: Estás a punto
, igualmente por las dudas activá el WP-Cache que como dice Lucas “está increible”!
Lucas & WiZaRd_: La verdad es que era un dolor de cabeza! Suerte que ya está solucionado. Pero mas allá de las fallas que pueda tener WordPress, funciona al pelo. Solo que hay que mimarlo de vez en cuando.
Gustavo: Los plugins que usan filtros son los que tienen que analizar el contenido de la página cuando es generada para agregar, cambiar o eliminar información.
Por ejemplo el reemplazador de acrónimos toma www y lo convierte en www.
Eso produce un trabajo adicional al procesador, sobretodo si la página es muy extensa y encima tiene que generarse dinámicamente.
Te nombraron en barrapunto.com!!!
Acá está la nota Optimizar el rendimiento de WordPress.
Congrats!
Gracias Gaby por la info!
yo hoy mismo recibiía el tercer aviso
voy a probar lo del plugin de caché... a ver si me arregla algo
Si, tan pronto puedas!
Y no te olvides de ptimizar la base de datos, vas a notar un gran cambio.
WordPress y uso de CPU: algunas lecciones
El pedido de auxilio para solucionar el problema de sobrecarga de CPU que hizo Boja provocó que mucha gente reaccionara y comenzara a dar sugerencias para solucionarlo, las que trato de recoger en este post.
...
[...] As
hola, que sucede si no tengo phpmyadmin??? utilizo ferozo V2 de Dattatec…
agradezco cualquier opcion para optimizar la base de datos!!!
Excelente!! hace más de un mes que los del hosting me están ladrando de que utilizo muchos recursos, le di mil vueltas al asunto y yo pensé que sólo querían sacarme más plata ofreciéndome un servidor dedicado. Como en mi blog tengo demasiadas imágenes, pensé que ese era el problema y comenzé a subir las imágenes a un servidor gratuito especializado jeje. Espero que aplicando lo que dices en este post se resuelva el problema, ya les contaré luego. Saludos!!
soy de mujeresfatales.com y como veras mi web esta muy lenta instale wp super cache que es la vercion mejorada , bueno no veo ningun cambio honestamente y saben que’ no me gust apor que??’
POR QU ENO ACTUALIZA EL CONTENIDO PARA VISITANTES SOLO ACTUALIZA PARA LOGEADOS , osea si actualizo hoy .. no se cuando se actualizara para los visitantes… eso no me gusta ahora me sale muchos errores en otros aspectos.