Linux utiliza un archivo de intercambio cuando los procesos se quedan sin memoria. En lugar de fallar, se permitirá que el procedimiento use una porción del disco, que es significativamente más lento, pero evita fallas involuntarias de memoria que pueden dañar la disponibilidad del servicio.
¿Qué es un Swapfile?
Comencemos por una pregunta retórica: ¿qué sucede cuando su computadora se queda sin memoria?
En Linux, un procedimiento de monitoreo especial, el procedimiento asesino / de monitoreo OOM, monitoreará si un sistema se está quedando sin memoria, a menos que el asesino OOM esté desactivado o configurado de manera distinto.
Cuando eso sucede, este procedimiento terminará uno de los procesos que se ejecutan en el sistema para liberar memoria. Esto puede conducir a resultados dolorosos como la corrupción de datos o servicios no disponibles. El acrónimo OOM significa «Out of Memory»
Una solución es comprar memoria adicional o reducir la cantidad de programas o servicios que se ejecutan simultáneamente en la computadora o el servidor. Pero, ¿qué tal si pudiéramos utilizar algo de nuestro espacio en disco (de forma general barato) como «memoria extra»?
Eso es exactamente lo que es y hace un archivo de intercambio: un archivo especial creado en su dispositivo de almacenamiento que después se convierte en parte de la memoria principal. No de forma directa, y hay una sobrecarga de procesamiento, sino indirectamente y con un impacto considerable en la velocidad de procesamiento.
Ventajas y desventajas de Swapfile
La memoria principal suele ser ultrarrápida en comparación con discos más lentos. Inclusive las SSD (unidades de estado sólido) son casi siempre más lentas que los chips de memoria principal de alta velocidad. Para los discos duros (discos duros tradicionales mecánicos, giratorios), la diferencia de velocidad es aún mayor.
Por eso, es una clara ventaja, en la mayoría de las configuraciones, usar un disco más lento (SDD y especialmente HDD) como fuente de memoria. La demora en la escritura de datos entre la memoria principal y el disco (dicho de otra forma, utilizar el disco como memoria) se denomina ‘intercambio’ (intercambio de memoria con espacio en disco)
Una vez dicho esto, siempre es una buena idea tener un archivo de intercambio de lados razonable en su sistema. El motivo es simple; digamos que solo necesitamos 1 Gigabyte adicional de memoria por un período de unos minutos para asegurarnos de que nuestro sistema no invoca al asesino OOM y finaliza algunos procesos. Un archivo de intercambio es mejor en esta circunstancia debido a que inclusive si un procedimiento se queda sin RAM utilizable, no se bloqueará, solo se ejecutará más lento un poco hasta que finalice su tarea.
A pesar de esto, si el sistema comienza a intercambiar mucho, casi definitivamente se volverá más lento (léase: mucho más lento). Esto será muy notorio.
En resumen, hay un equilibrio fino y delicado, que es algo arbitrario y depende de muchas cosas diferentes dentro de una situación dada; el número de procesos que se ejecutan en un sistema y sus tamaños de trabajo de memoria, la memoria total en uso, la memoria disponible en el archivo de intercambio, la configuración específica del archivo de intercambio del sistema, etc.
Algunas consideraciones sobre archivos de intercambio
En muchas configuraciones de Linux en el mundo actual, hay una partición de intercambio asignada en uno de los discos dentro del sistema. Esta es un área especial, de forma general (pero no exclusivamente; se puede agregar más adelante) reservada durante la instalación del sistema operativo Linux. Tiene la misma funcionalidad de destino que es la misma que la de un archivo de intercambio. Para verificar si su sistema tiene algún tipo de intercambio habilitado hoy en día, simplemente ejecute lo siguiente en su terminal:
sudo apt -y install htop
htop
Y localice la próxima salida:
Observe cómo en este sistema, hay una memoria principal de 62.7G y un espacio de intercambio de 11.0G. Además puede ver cómo solo una pequeña cantidad (23,5 millones) está hoy en día en uso. Si sospecha que su sistema está cambiando, verifique cómo se ven estos dos contadores.
Si ambos están casi llenos, es muy probable que su sistema cambie mucho y funcione significativamente más lento. El motivo es que ahora hay una gran carga de E / S ligada (dicho de otra forma, ligada al disco), intercambiando constantemente la memoria principal con la memoria basada en disco.
Como regla general, algunas personas prefieren utilizar un cierto porcentaje de la memoria del sistema como tamaño que se asignará a un archivo de intercambio. Personalmente, tomo otra ruta, y es considerar cuánta memoria adicional puedo necesitar. Si el tamaño es considerable, a modo de ejemplo, un servidor con 8 GB probablemente terminará usando 14 GB para un caso de uso específico, entonces tiene mucho más sentido incrementar la memoria del servidor de 8 GB a 16 GB.
A pesar de esto, si el sistema tiene 8GB y el uso usual es de 6-7GB con un pico ocasional si inicio demasiados programas al mismo tiempo, puedo considerar un espacio de intercambio adicional de 8GB, o un poco más. El espacio en disco suele ser bastante barato, por lo que sobredimensionarlo un poco, siempre que tenga el espacio, no le hará daño.
Cómo habilitar un archivo de intercambio
¿Listo para agregar un archivo de intercambio? Esto se puede hacer sobre la marcha. Este método funcionará tanto en Debian (Ubuntu, Mint,…) como en sistemas basados en RedHat (RedHat, Centos,…).
Crearemos un archivo de intercambio de 1 Gigabyte, 1000 Megabyte o 1024000 Bloques (calculado como el número de Megabytes x 1024) en este ejemplo.
Lo llamaremos swapfile123, ubicado en el directorio raíz (/), y le hemos dado ese nombre para evitar sobrescribir cualquier archivo que ya tenga en su lugar. Si está seguro de que no tiene ningún archivo llamado / swapfile, puede usarlo en su lugar si lo desea, teniendo cuidado de cambiar el nombre del archivo en todos los lugares correctamente.
Asegúrese de escribir cualquier comando, y especialmente el dd
comando, con cuidado para no sobrescribir ningún dato en su sistema. Usamos sudo su
para ingresar al modo de superusuario (su) a través de sudo
. Es muy parecido a ejecutar cada comando usando sudo
, aún cuando es más fácil no escribir cada prefijo de comando sudo de esta manera.
sudo su
if [ -r /swapfile123 ]; then echo "Stop please! /swapfile123 already exists!"; fi
dd if=/dev/zero of=/swapfile123 bs=1024 count=1024000
chmod 0600 /swapfile123
mkswap /swapfile123
swapon /swapfile123
Debería ver un resultado semejante al siguiente:
Si es así, ¡enhorabuena! ¡Acaba de habilitar su primer archivo de intercambio, dinámicamente (sobre la marcha), en la línea de comandos de Linux!
Primero usamos el dd
herramienta para crear nuestro espacio de intercambio, usando la /dev/zero
dispositivo (un dispositivo virtual que solo genera ceros cuando es llamado, por dd
o cualquier otra herramienta). A continuación, establecemos algunos privilegios de seguridad adecuados.
A continuación, le indicamos al sistema operativo que el archivo se convertiría en un archivo de intercambio usando el mkswap
mando. Por último activamos el espacio de intercambio, dinámicamente en la línea de comandos, sin tener que reiniciar nuestro sistema.
Además podemos verificar fácilmente si nuestro espacio de intercambio se volvió más grande usando free -m
:
Genial, puedes ver cómo pasamos de 12215M a 11215M (-1000M como se esperaba) cuando desactivamos el archivo de intercambio recién creado. Además puedes ver cómo usamos swapoff
para desactivar dinámicamente el intercambio en la línea de comando.
Es bueno saber que si en algún momento vemos que nuestro sistema tiene problemas de memoria y podemos escribir lo suficientemente rápido, podemos darle memoria adicional sobre la marcha 🙂 En la práctica, es mejor hacer esto por adelantado antes de que ocurran los problemas.
Ahora solo tenemos un pequeño problema que abordar. Si reiniciáramos en este momento, mientras nuestro archivo de intercambio permanecería en el disco, el sistema no lo estaría usando. Hasta ahora no se ha realizado ningún cambio de configuración, lo que garantizará que el espacio de intercambio se vuelva a cargar al reiniciar el sistema.
Habilitación de nuestro nuevo intercambio en el momento del arranque
Para habilitar el nuevo espacio de intercambio en el momento del arranque, simplemente agregue la próxima línea (como línea) a / etc / fstab:
/swapfile123 swap swap defaults 0 0
Puedes hacerlo mientras aún estás en sudo su
modo (como lo indica el #
) iniciando el editor nano para / etc / fstab:
nano /etc/fstab
cat /etc/fstab
Después, simplemente agregue la línea de arriba al archivo al final y guárdelo (CTRL + X> Y> enter). No modifique ni elimine ninguna otra línea, puesto que esto puede provocar que su sistema ya no se inicie correctamente. Además asegúrese de verificar el contenido de su archivo / etc / fstab antes de reiniciar ejecutando el cat /etc/fstab
encima.
Ahora puede reiniciar su sistema y confirmar que su espacio de intercambio adicional aún está habilitada usando free -m
de nuevo.
Eliminación de nuestro nuevo espacio de intercambio
Si desea quitar el nuevo espacio de intercambio, o tal vez crear uno algo más grande, puede hacerlo editando nuevamente el archivo / etc / fstab primero y eliminando la línea que carga el archivo de intercambio en su totalidad. No modifique ni elimine ninguna otra línea, puesto que esto puede provocar que su sistema ya no se inicie correctamente. Después puede ejecutar:
sudo swapoff /swapfile123
rm /swapfile123
¡Todo listo! Tampoco es necesario reiniciar, puesto que este cambio se realizó de forma dinámica. En el próximo reinicio, el archivo de intercambio ya no se activará puesto que eliminamos la línea coincidente del archivo / etc / fstab.
¡Disfruta de Swapfiles!