TIPS VERANIEGOS (o cómo yo también tengo un cuñado)

 ¡Muy buenas amigos míos! Ya lo siento, pero hoy me toca a mi dar un poco la lata, de modo que como hace muuuucho calor, vamos a ir a uno de mis ya clásicos “Tips Veraniegos” (imaginaos la música de Verano Azul de fondo…), bueno no, mejor no… 😉

Podríamos hablar de la implementación de la LOPD con miras al Reglamento Europeo de Proteción de Datos (RGPD) pero como que paso bastante.

Así que una cosa ligerita, cómoda para leer mientras tomas una cañita y poco más. ¿Y qué os puedo contar? A ver, os contaré la última que me pasó ayer…

Contexto: Mi cuñado (cuyo curro no tiene nada que ver con el mío…) le empieza a gustar el maravillosos mundo de la administración de sistemas y poco a poco (y con mucho mérito debo añadir por su esfuerzo), el hombre va y le monta a su esposa (mi cuñada) una pequeña tienda virtual, con un pequeño VPS que tiene por ahí el hombre y todo eso. Hasta aquí todo genial, yo le ayudé en las pocas dudas que el hombre tuvo y poco a poco la puso en producción. No nos imaginemos una gran cosa, un ubuntu server, con muy poco procesador y RAM justita, pero bueno para un apache, con una web ligerita en wordpress y poquito tráfico la verdad es que le bastaba ( o eso pensaba yo…). Y la verdad es que gracias a la maravilla que es linux, oye pues que iba bastante bien.

Problema: El hombre se viene arriba y le empieza a instalar servicios que no necesitaba, empieza a darle chicha al server y como resultado…

Pip, pip (imaginar el sonido de un mensaje de Telegram), mensaje: “Oye, la web se ha caído. ¿Qué hago?”

“¿Comorrrr? Si la última vez que la vi, iba muy bien. A ver que pasa….”

Saco el arma mas poderosa de un sysadmin que se precie(la terminal), intento conectarme por ssh y tras un par de intentos logro loguearme, le lanzo un htop y veo que está toda la RAM ocupada y el procesador a poco mas del 6%.

Como buen forense, reviso logs, reviso posibles entradas al sistema, así un poco por encima y no, todo estaba bien ¿qué pasa aquí?

Momento donde el server dijo “Hasta aquí he llegado”

Revisando el resultado de htop veo una serie de procesos que no tenían que estar ahí funcionando, básicamente porque no hacían falta. Un servidor de correo ¡yo que sé lo que había ahí!

Le pregunto a este hombre y me cuenta que le instaló para probar todo lo que se le ocurrió y mas, ¿y qué pasó amigos míos? Lógico, el server dijo “Hasta aquí hemos llegado”. Así de simple….

Pues nada, hay que solucionarlo, le indico que me traiga una cervecita y nos ponemos al lío:

  1. Paso primero: Desinstalar todo aquello que no haga falta y que no vayamos a usar…(sudo apt-get remove “nombre-del-paquete” && sudo apt-get purge “nombre-del-paquete” && sudo apt-get clean “nombre-del-paquete” )
  2. Paso segundo: Veamos la carga del sistema… Bueno, va mejorando la carga y el consumo de RAM ha bajado bastante, parece que empezamos a remontar la crisis.
  3. Como dicen algunos “amados” clientes, “pues ya que estas aquí…” (os suena ¿verdad que sí?) a lo que voy, como no me terminaba de encajar, la RAM iba bastante mejor las cosas como son, pero seguía estando un poco justa en mi opinión. Me pareció un buen momento para explicar a mi cuñado el “temita” de la swap y comentarle el tema de los swappines.

Obviamente, no os voy a insultar a aquellos que me leéis explicando en profundidad que son estos conceptos, seguro que lo conecéis mejor que yo, pero creo que una pequeña intro es necesaria para la explicación que viene después, lo siento si os aburro pero quiero dejar los conceptos en claro:

Como habréis podido deducir el término swappiness hace referencia al Swap, y efectivamente esta diseñado para optimizar y aprovechar el uso de la Swap y la RAM.

A lo que vamos:

La Swap es básicamente una “especie”de RAM, pero que está instalada en el disco duro, esto conlleva una serie de ventajas y de inconvenientes. Como ventaja principal se puede decir que podemos crear crear una particion Swap del tamaño que deseemos y de este modo, disponer de más RAM. El inconveniente principal de la Swap es que es bastante mas lenta que la RAM convencional (aunque este punto con los discos nuevos sólidos no se aprecia tanto).

A día de hoy, crear la partición de Swap en la mayoría de los equipos no es realmente necesario, de hecho en los servers con los que se trabajan hoy en día, que tienen enormes cantidades de RAM, la Swap carece de sentido alguno, tenemos memoria RAM de sobra para cargar los procesos. Si embargo, si que es muy recomendable crearla en ordenadores que dispongan de menos de 2GB de RAM ya que puede llegar a ser necesaria.

¿Por qué puede ser necesaria? En equipos con muy poco RAM (como es el caso que me hallo relatando) si se instalan una serie de servicios o según como se configuren (recordemos que apache es muy poderoso, de hecho me encanta, pero la RAM se la come, como mi mujer el chocolate) puede llegar a ser necesario ya que la RAM simplemente “desaparece”.

Genial, repito la pregunta ¿Por qué? Pues mirad, porque linux usa la memoria RAM que sobra para almacenar datos, información de los archivos y programas que usamos, que hemos accedido recientemente o utilizamos de forma frecuente. De esta manera cada vez que necesitamos acceder a estos datos o servicios, lo podemos hacer de forma mucho más rápida porque se encuentran almacenados en la memoria RAM, así no tenemos que sin acceder a la información almacenada en nuestro disco duro con el consiguiente ahorro de tiempo.

Por otro lado cuando en Linux se abre un programa, se reserva una cantidad determinada de memoria para su funcionamiento. Poca gente sabe que la cantidad de memoria reservada por el kernel es mayor que la memoria usada por el programa, así en el momento que el programa necesite más memoria RAM, se la puede proporcionar de inmediato sin tener que realizar operaciones extras ya que se dispone de memoria sobrante reservada con anterioridad.

Todo esto hace que muchas veces se diga que la RAM está para usarse y cuanta más se use, mejor. Eso si, si usamos toda ¿qué puede pasar? No hace falta que lo diga ¿verdad?

Para evitar esto, se usa swapinnes. Y como decía el del chiste “Y esto ¿qué es lo que es?

Swapiness es una propiedad del Kernel de Linux que permite decidir en que momento nuestra distribución Linux empezará a usar la partición de Swap para cargar procesos y datos, en detrimento de la RAM. Es decir, decide (aunque lo podemos configurar como queramos) cuando empezar a “coger prestada” memoria SWAP en lugar de memoria RAM. Podemos configurar el swappiness para que solo se use la Swap cuando la RAM esta prácticamente llena o al revés, decidir la prioridad es cuestión de cada ordenador, mas bien de la RAM de la que disponga el equipo.

¿Vamos bien hasta aquí? ¿Seguro? No sé, alguno está poniendo la misma cara que mi cuñado el otro día…

El swappiness puede tener un valor entre 0 y 100, usualmente en todas las distribuciones viene con un valor por defecto de 60. Si queréis comprobar que valor tiene en vuestra máquina, solo tenéis que teclear lo siguiente en la Terminal:

cat /proc/sys/vm/swappiness

Lo veis ¿verdad? Esta es la configuración “standard” (al menos yo no me he encontrado con otras distintas).

Ese valor (60) quiere decir, simplemente, que vuestro máquina empezara a usar la SWAP cuando la RAM este un 40% llena. Si se tiene 2 GB o menos de RAM se aconseja dejarlo en ese valor, aunque también podéis probar otras combinaciones, no pasaría nada. Es mas os animo a que (en máquinas virtuales, eso si, no me seáis cuñados, por favor…).

Debéis tener en cuenta que cuanto mas bajo sea el valor que pongáis al swappiness, más tardará el server en empezar a usar la Swap y cuanto más alto sea el valor de swappiness antes empezará a usar la Swap.

¿Y esto para qué sirve? Mirad, en el server de mi cuñado (y que conste que lo de cuñado no es broma, es mi cuñado de verdad) tiene muy poca RAM, una miseria, si se empieza a comer RAM sin conocimiento el equipo va a reventar si o si, es un hecho. Normalmente, en según que contextos esté vuestra máquina, puede incluso darse el caso de que no tenga swap en el caso de que sea una máuina virtual, en ese caso un pequeño Tip (y es hasta aquí donde quería llegar con esta “pequeña” introducción es lo siguiente:

  • Creamos un archivo con la utilidad dd del tamaño que queramos asignar como SWAP. Para ello usamos el esta instrucción como root:

sudo dd if=/dev/zero of=/PATH_DONDE_QUIERAS_ALMACENAR_SWAP/swap bs=1M count=120

  • Una partición swap tampoco tiene nada especial. Estas se crean como cualquier otra partición, la única diferencia es que ésta es accedida de manera directa (al disco), esto significa, que no contiene ningún sistema de archivos. Es necesario escribir unas marcas al comienzo del mismo que contienen información administrativas utilizadas por el Kernel. Después de haberla creado (con la línea anterior hemos creado un archivo de 120 MB, ahora debemos decirle al sistema que lo use como swap para ello usaremos el comando

mkswap  /PATH_DONDE_QUIERAS_ALMACENAR_SWAP/swap

  • Y ahora lo activamos con esta orden:

swapon /PATH_DONDE_QUIERAS_ALMACENAR_SWAP/swap

  • ¡Y ya estaría activada! ¿Difícil? No demasiado, ¿verdad? Ahora solo resta añadir un detalle, en cuanto se reinicie la máquina esta swap la vamos a perder, debemos entrar al fichero /etc/fstab e indicarle al sistema que la monte cuando se inicie. Veamos…

En este caso, a modo ejemplo se han creado dos particiones que estaban creadas en la raíz y se han montado,  ya estaría todo solucionado.

Bueno ya tenemos mas SWAP, pero tal vez, nos podría interesar indicarle a swapiness que empiece a coger SWAP antes o después, se podría poner a 50 de valor, a 30, a 70… Podéis hacer pruebas en caliente con el siguiente comando:

Si queremos probar como funcionaria nuestro ordenador con el valor 10 solo tenemos que poner lo siguiente en la Terminal:

sudo sysctl -w vm.swappiness=10

Ahora el swappiness tendrá como valor 10 y el server solo empezará usar la SWAPcuando la RAM esté llena al 90%.

Os animo a probar combinaciones, mirar que tal va de una manera o de otra, por ejemplo, yo creé 220 MB de SWAP y puse el valor a 50, en media hora (no, no es instantáneo), tenía la SWAP casi al 80% por ciento ocupada y en la RAM tenía 200 MB más extras. Si fuera un disco duro mecánico tendría una penalización interesante en rapidez, pero es un server virtual que corre sobre discos sólidos con lo cual aunque hay pérdida, tampoco es tan sustancial como pareciera y el server sacó de la nada 220 MB de RAM que puede usar en caso de carga del sistema o cualquier incidencia que pueda tener, si el valor de swapiness a 50 de aquí a unos días no me encaja, pues pruebo otros valores, no pasa nada, se lo que hago y como responder si algo falla. No hay problema. El único temor de un sysadmin que se precie debe tener es que se acabe el café en la máquina de la oficina, nada más.

¡Ups! Última nota, el valor que habéis metido de swapiness si queréis que se quede fijo debéis ir al archivo /etc/sysctl.conf y añadir al final el valor:

vm.swappiness=(Valor que queráis que tenga de swapiness)

Y ya está, no os cuento más, que para una tomar una caña mientras se lee esto ya vale.

¡Hasta la próxima¡

5 opiniones en “TIPS VERANIEGOS (o cómo yo también tengo un cuñado)”

  1. La swap es esa gran olvidada por culpa de esos cacharracos que venden con brutalidades de RAM pero yo pienso que por mucha RAM que te sobre no está de más tener una reserva por si las moscas, al final es lo mismo porque los discos duros también son ya muy grandes así que por quitar un poco no va a pasar nada.

      1. Tuve una experiencia con eso hace ya unos cuantos años, cuando los servidores virtuales eran novedad antes de llamarse VPS y fué un tremendo dolor de cabeza, un sitio sin apenas nada comía RAM como un tiburón ballena en un buffet de placton, al final es malo para el usuario pero bueno para el negocio xD

Deja un comentario