Como optimizar el uso de CPU, RAM y ancho de banda de los servidores compartidos

por


Share Button
    informe Hace poco hemos sufrido una caída importante desde el servidor compartido en el que se aloja este blog. Todo fue debido a un gran consumo de CPU que se estaba realizando, el error cometido fue haber dejado los plugins activados, algo que a lo largo de unas horas y las peticiones realizadas al servidor por parte de los visitantes aumentaron excesivamente el uso de CPU.

    Disponer de servidores compartidos (shared) suele ser un inconveniente de las que muchas empresas no suelen hablar y cuando llegamos al consumo permitido entonces nos sugieren la migración a un servidor dedicado, algo que muchos no podemos costearnos dado su elevado precio mensual.

    Es evidente que dar el salto a un servidor dedicado pueda ser la solución pero como he dicho anteriormente el cliente podría verse incomodado ante dicha situación y las compañías no suelen ofrecer algún servicio para determinar la procedencia del problema.

    Debemos tener en cuenta que la información que os proporciono es objetiva para los administradores o desarrolladores de Webs, así que antes de nada debemos dar a conocer unos conceptos básicos:

  • Referer o referido: es la página de donde procede la visita. Nos informa el lugar o web desde donde se ha accedido a nuestro sitio, es decir, si ha provenido de un buscador, algún foro, un pingback o trackback, etc…
  • Requests o peticiones: es lo que se denomina el número de accesos a los ficheros que se encuentran en cada una de las páginas, es decir, las imágenes, páginas en sí, las descargas, etc… A esto debemos darle bastante importancia, pues a un mayor número de peticiones en un espacio breve de tiempo harán que el servidor aumente en el consumo de recuros. Si las peticiones realizadas no se encuentran dentro de nuestro servidor, es decir, un enlace externo, no consumirá recursos.
  • Robots (Bots, Crawlers) o arañas: son en la mayoría de las ocasiones los causantes de grandes recursos debido al número de peticiones que suelen realizar si no son controlados (esto no suelen mirarlo los proveedores de hosting, ni mucho menos dan consejos sobre ello).

robots-txt

    En la mayoría de las ocasiones, este tipo de consumo puede optimizarse con el propósito de evitar grandes catástrofes, como podría ser la suspensión temporal o cancelación de la cuenta que tengamos con nuestro proveedor (sin derecho a devolución del importe que hayamos pagado por el servicio que no hemos empleado).

    Controlando los Bots…

    denied-access

    Existen Bots que en la mayoría de las ocasiones realizan demasiadas peticiones (requests), también algunos usuarios, pero por el momento centrémonos en los Bots. Para llevar a cabo un buen control de los mismos es necesario que llevemos a cabo una serie de pasos, tales como:

  • Impedir el acceso a determinados robots: hay que conocer que no todos los robots realizan peticiones exageradamente, por lo tanto, existirán robots buenos y robots malos. Para impedir el acceso a determinados robots, se emplea el fichero Robots.txt, en el cual se incluirán una serie de “comandos”.
  • Prohibir el acceso por zonas: es importante tener en cuenta que no todo el contenido del blog ha de ser restringido y debemos controlar el flujo de aquellos robots que realizan el abuso de determinados accesos, para ello es conveniente analizar desde nuestro panel de control de administración del servidor las estadísticas correspondientes, de tal forma que podamos denegar el acceso a aquellos robots que se sobrepasen con las peticiones.
  • Fijar un mapa del sitio: esto facilita en gran medida el acceso al contenido de nuestro site de los robots buenos.
  • Eliminar el contenido duplicado: ya se que esto es algo complicado, pero es muy importante pues los webmasters siempre olvidamos este aspecto, sin embargo, tenerlo en cuenta facilitará la mejora del PR (Page Rank) de nuestra Web.
  • El acceso descontrolado de robots o usuarios, además del consumo de recursos, puede ocasionar el error 503, dejando el servicio inaccesible a los usuarios.

Desde el fichero Robots.txt no es posible controlar todo, y por tanto, los intentos de acceso por fuerza bruta debemos controlarlos mediante el fichero .htaccess, de todas formas, siempre podemos hacer uso de buenas herramientas para la creación del fichero Robots.txt desde RobotsTXT.org donde podemos encontrar excelente documentación oficial o bien si queremos profundizar más en el asunto tenemos algunos ficheros robots.txt de ejemplo e incluso desde apache podemos encontrar otros ya optimizados. Si dicho fichero lo realizamos nosotros personalmente es bueno revisarlos mediante un validador antes de subirlos al servidor.

Emplear un sistema anti-hontlink…

En agosto del año pasado, dimos paso a colaborar con Globedia pero desistimos por el robo de ancho de banda que se estaba cometiendo, así que decidí elaborar un artículo para protegenernos del hotlinking , es decir, del robo de ancho de banda cuando otra web enlaza imágenes o contenido de nuestro blog para ser visualizados en el suyo propio.

A modo resumen puedo volver a citar lo siguiente para aquellos que han llegado un poco tarde:

El hotlink es lo que se denomina robo de ancho de banda, es la práctica que se tiene de tomar un enlace directo a los archivos de una web que no es administrada por nosotros. Se puede enlazar cualquier tipo de fichero  (imagen, video, etc…) y mostrarla en nuestra web. Lo más utilizado para esto son las imágenes.

Emplear sprites en las imágenes para evitar el consumo de ancho de banda…

Hace tiempo explicamos lo que eran los sprites, tal información puedes encontrarla en esta entrada sprites en CSS, y si estamos como gestor CMS (gestor de contenidos) WordPress, entonces encontraremos un plugin para WordPress en esta otra entrada, denominado cSprites que nos permitirá el ahorro de ancho de banda para las peticiones que se realicen de las imágenes que contenga nuestro tema o plantilla.

A continuación detallaremos alguna de las posibles mejoras, dependiendo de la plataforma, para intentar reducir el consumo, mantener a la empresa de hosting tranquila, aumentar la velocidad de carga del sitio y posiblemente evitar la migración a una cuenta mas costosa.

Mejores prácticas comunes a cualquier plataforma…

Aunque nos centraremos más en el gestor CMS de WordPress, estos son algunos pasos que podrían ser aplicados a cualquier plataforma, es decir, Drupal, Joomla, Blogger, etc…

  • Instalación de módulos / plugins: Muchas veces la instalación de agregados aparte impactan fuertemente sobre el rendimiento por lo que aconsejamos utilizar la menor cantidad de agregados posibles y desinstalar aquellos que no utilicemos.
  • Actualizar versiones: Los desarrolladores suelen mejorar múltiples aspectos de rendimiento y seguridad. Aunque tener la última versión no es siempre sinónimo de mayor velocidad, si suele ser de mayor seguridad. Recuerden siempre tener la última versión actualizada de la plataforma y de los plugins.
  • Activar Caché: La gran mayoría de las plataformas permiten activar el caché y el mecanismo en casi todos los casos es el mismo; guardar las consultas a la base de datos para evitar tener que repetirlas con cada nueva visita. La activación de esto es una de las mayores causas de reducción de consumo.
  • Optimización de la base de datos: Desde su panel de control, vía phpMyAdmin es posible ejecutar la optimización de todas sus tablas. Siendo recomendable hacerlo una vez por semana cuando se superen las 15000 visitas al día.

    Mejorando el rendimiento de consumo de WordPress…

El primer y mas importante paso consiste en la instalación y configuración de W3 Total Cache. Éste plugin acelerará la carga del blog, reducirá el espacio necesario para el caché y reducirá considerablemente el consumo de recursos en el servidor.

Recuerden no actualizar el caché ni ejecutar el cron con una periodicidad mayor a los 60 minutos.

Instalar WP-DBManager para optimizar la base de datos regularmente y comprobar el consumo realizado por cada uno de los plugis, pues lo más probable es que alguno esté consumiendo grandes cantidades de recursos, especialmente CPU. Para ello emplearemos el plugin PluginHogDetector.

A modo particular yo he empleado en mi caso un plugin denominado WEBO Site Insight, el cual me proporciona los datos necesarios en cuanto a consumo de CPU, RAM, Carga (Load Seed) y Espacio libre en Disco del Servidor (Free Disk Space).

WEBO Site Insight

Además de emplear el plugin anterior para ver el consumo, estoy realizando unas pruebas con el plugin WEBO Site SpeedUp, con el que puede configurarse las opciones de caché y otros como la compresión de JavaScript y CSS entre otras muchas. Puedes realizar una prueba online en demo.sitespeedup.com/webo/. El password para la demo es sitespeedup

Lo mantendré al menos una semana, espero que no me vuelvan a suspender la cuenta por realizar dichas pruebas, ya que mi objetivo es aprender de los errores y comentarlos en el blog para que todos podamos evitarlos.

[Información consultada y algunas imágenes: Emezeta]