Limpieza del servidor
Ocasionalmente, nos podemos encontrar que alguna aplicación no funciona correctamente debido que no se libera memoria cacheada. Esto puede ser un problema grave en un servidor. Vamos a ver un «scriptbash», al que llamaremos «LimpiezaServer.sh», para realizar el trabajo rápidamente.
Sumario
- Consideraciones previas
- Comprobar estado de la memoria
- Limpieza de la memoria cache y swap
- Liberar memoria cache, inodos y dentries
- Liberar la swap
- Codigo del «scriptbash»
Consideraciones previas
Para mejorar el rendimiento de nuestro servidor, conviene liberar la carga de la RAM de los espacios de memoria ocupados por los «inodos» y «dentries» que ya no son necesarios. Vamos a ver un «scriptbash» que resuelve este problema de forma sencilla. Vemos algunos conceptos y luego aporto el código para que solo tengas que copiar y pegar si lo quieres probar.
Un «inodo» es una estructura de datos que almacena información sobre un fichero de nuestro sistema de ficheros. Un «inodo» no tiene nombre y se identifica con un número entero. Cuando el sistema utiliza un fichero, el «inodo» de ese fichero específico se almacena en la RAM, ocupando espacio.
Un «dentry» es una estructura de datos que representa un directorio. Estas estructuras se usan para crear una caché de memoria que representa la estructura de ficheros en un disco. También consume espacio de la RAM.
La caché de la página es un espacio asignado en la memoria RAM para facilitar la rápida apertura de aquellos programas que ya se han abierto previamente, y que aún están presentes en la memoria.
Como es obvio, vaciar estos espacios de memoria mejorará el rendimiento del servidor.
Si efectúas una limpieza de «inodos», «dentries» y «cache» en un servidor donde se estén ejecutando escrituras intensivas a disco, existe el riesgo de que estemos vaciando datos de la caché antes de que lleguen al disco. En este caso ten en cuenta la programación del trabajo.
Comprobar estado de la memoria
Primero comprobaremos el estado de la memoria ejecutando el comando «free»
Limpieza de la memoria cache y swap
En primer lugar tendremos que deshabilitar el servicio «httpd».
Para liberar memoria cache, inodes y dentries, tenemos varias opciones:
Si queremos eliminar cache ejecutaremos
sync; echo 1 > /proc/sys/vm/drop_caches
Si queremos eliminar inodes y dentries ejecutaremos
sync; echo 2 > /proc/sys/vm/drop_caches
Si queremos eliminar cache, inodes y dentries ejecutaremos
sync; echo 3 > /proc/sys/vm/drop_caches
Liberar la swap
Para liberar la swap usamos el comando «swapoff». Seguidamente, para terminar, habilitamos la swap y el servicio «httpd».
Vistas las explicaciones vamos con el código del script. Solo tienes que copiar y pegar el siguiente código en un fichero de tu sistema y darle permisos de ejecución. Como lo hago en remoto desde una máquina Ubuntu Desktop, me logueo con ssh y usuario y escalo privilegios en el servidor.
Al ejecutar el «script» obtengo la siguiente salida
Codigo del «scriptbash» LimpiezaServer.sh
#!/bin/bash # Script para realizar una optimización del servidor. # Este programa ha sido creado por Francisco Javier Izquierdo Hidalgo. # Este programa es software libre, puedes redistribuirlo y / o # modificarlo bajo los términos de la Licencia Pública General de GNU # publicado por la Free Software Foundation, ya sea la versión 2 # de la Licencia, o (a su elección) cualquier versión posterior. # Este programa se distribuye con la esperanza de que sea útil, # pero SIN NINGUNA GARANTÍA, sin siquiera la garantía implícita de # COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR. Ver el # GNU General Public License para más detalles. echo "=========================================================" echo " " echo " Limpieza del servidor" echo " " echo "=========================================================" echo " by Javier Izquierdo" sleep 5s echo " " echo " Vamos a realizar un mantenimiento al servidor" echo " " echo "Comprobando el estado de la memoria..." echo " " free echo " " echo " !!!! Comprobación completada ¡¡¡" echo " " sleep 2s; echo "Limpieza de memoria cache y swap"; echo " " sleep 2s; echo "Deshabilitando HTTP..." killall -KILL httpd echo " " echo " !!! Http deshabilitado ¡¡¡" echo " " sleep 5s; echo "Deshabilitando swap..." swapoff -a echo " " echo " !!! Swap deshabilitada ¡¡¡" echo " " sleep 5s; echo "Liberando page-caches, dentries e inodes..." sync; echo 3 > /proc/sys/vm/drop_caches echo " " echo " !!! Server liberado ¡¡¡" echo " " sleep 2s; echo "Habilitando la swap..." swapon -a echo " " echo " !!! Swap habilitada ¡¡¡" echo " " sleep 2s; echo "Habilitando http..." service httpd start echo " " echo " !!! Servicio httpd habilitado ¡¡¡" echo " " sleep 2s; free echo " " echo " ===================" echo " SERVIDOR OPTIMIZADO" echo " ===================" echo " "
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.