Cómo agregar swap en Ubuntu 14.04

Introducción

Una de las maneras más fáciles de aumentar la capacidad de respuesta de su servidor y proteger contra los errores de falta de memoria en sus aplicaciones es agregar algo de espacio de intercambio. Swap es un área en un disco duro que se ha designado como un lugar donde el sistema operativo puede ser mejorado en la memoria RAM.

Básicamente, esto te brinda la posibilidad de aumentar la cantidad de información que tu servidor puede mantener en su “memoria” de trabajo, con algunas publicidades. El espacio en la discoteca se utiliza principalmente cuando el espacio en la memoria RAM no es suficiente para los datos.

La información escrita en la discoteca será más lenta que la información guardada en la memoria RAM, pero el sistema operativo preferirá seguir ejecutando los datos de la aplicación en la memoria y utilizar el intercambio de los datos más antiguos. En general, tener un espacio de intercambio como un respaldo cuando la memoria RAM de su sistema es una buena red de seguridad.

En esta guía, veremos cómo crear y habilitar un archivo de intercambio en un servidor Ubuntu 14.04.

Sustantivo

Aunque el intercambio generalmente se recomienda para los sistemas que utilizan discos duros giratorios tradicionales, el intercambio con SSD puede causar problemas con la degradación del hardware a lo largo del tiempo. Debido a esta consideración, no recomendamos habilitar el intercambio en Binaria o cualquier otro proveedor que utilice el almacenamiento de SSD. Hacerlo puede afectar la confiabilidad del hardware subyacente para ti y tus vecinos.

Si necesita mejorar el rendimiento de su servidor, le recomendamos que actualice su Droplet. Esto implica mejores resultados en general y disminuirá la probabilidad de responder a problemas de hardware que puedan afectar su servicio.

Comprobar el sistema para información de Swap

Antes de comenzar, analizaremos nuestro sistema operativo para ver si ya tenemos algún espacio de swap disponible. Podemos tener múltiples archivos de intercambio o particiones de swap, pero en general uno debería ser suficiente.

Podemos ver si el sistema tiene algún swap configurado escribiendo:

sudo swapon -s

Filename                Type        Size    Used    Priority

Si solo recupera el encabezado de la tabla, como se muestra arriba, actualmente no tiene habilitado ningún espacio de swap.

Otra forma más familiar de verificar el espacio de swap es con la utilidad free, que nos muestra el uso de la memoria del sistema. Podemos ver nuestra memoria actual y el uso de swap en megabytes escribiendo:

Como puedes ver arriba, nuestro espacio de swap total en el sistema es “0”. Esto coincide con lo que vimos con el comando anterior.

Comprobar el espacio disponible en la partición del disco duro

La forma típica de asignar espacio para swap es usar una partición separada dedicada a la tarea. Sin embargo, alterar el esquema de partición no siempre es posible. Podemos crear fácilmente un archivo de swap que resida en una partición existente.

Antes de hacer esto, debemos estar conscientes de nuestro uso actual del disco. Podemos obtener esta información escribiendo:

Como puedes ver en la primera línea, nuestra partición de disco duro tiene 55 Gigabytes disponibles, por lo que tenemos una gran cantidad de espacio para trabajar. Sin embargo, se trata de una instancia de VPS de tamaño mediano, por lo que su uso real podría ser muy diferente.

Aunque hay muchas opiniones sobre el tamaño apropiado de un espacio de swap, realmente depende de tus preferencias personales y los requisitos de su aplicación. En general, un buen punto de partida es una cantidad igual o el doble de RAM en tu sistema.

Ya que mi sistema tiene 4 Gigabytes de RAM, y al duplicar eso tomaría una parte significativa de mi espacio en disco que no estoy dispuesto a separar, crearé un espacio de swap de 4 Gigabytes para que coincida con la RAM de mi sistema.

Crear un archivo de swap

Ahora que conocemos el espacio disponible en nuestro disco duro, podemos crear un archivo de swap dentro de nuestro sistema de archivos.

Crearemos un archivo llamado swapfile nuestro directorio root (/). El archivo debe asignar la cantidad de espacio que deseamos para nuestro archivo de swap. Hay dos formas principales de hacer esto:

El tradicional, camino lento

Tradicionalmente, crearíamos un archivo con espacio preasignado usando el comando dd. Esta versátil utilidad de disco escribe desde una ubicación a otra ubicación.

Podemos usar esto para escribir ceros en el archivo desde un dispositivo especial en sistemas Linux ubicados en /dev/zero solo se escogen tantos ceros como se solicite.

Especificamos el tamaño del archivo utilizando una combinación de bs para el tamaño de bloque y count para el número de bloques. Lo que asignamos a cada parámetro es casi completamente arbitrario. Lo que importa es lo que resulta ser el producto de multiplicarlos.

Por ejemplo, en nuestro ejemplo, buscamos crear un archivo de 4 Gigabytes. Podemos hacer esto especificando un tamaño de bloque de 1 Gigabyte y un conteo de 4:

Verifica el comando antes de presionar ENTER porque esto tiene el potencial de destruir datos si apunta of (lo que significa archivo de salida) a la ubicación incorrecta.

Podemos ver que se asignaron 4 Gigabytes escribiendo:

Si has completado el comando anterior, puede notar que tomó bastante tiempo. De hecho, puedes ver en la salida que mi sistema tardó 18 segundos en crear el archivo. Eso es porque tiene que escribir 4 Gigabytes de ceros en el disco.

Si deseas aprender cómo crear el archivo más rápido, elimínalo y sigue los pasos a continuación:

El camino más rápido

La forma más rápida de obtener el mismo archivo es mediante el uso del programa fallocate. Este comando crea un archivo de un tamaño preasignado al instante, sin tener que escribir contenido falso.

Podemos crear un archivo de 4 Gigabytes escribiendo:

El aviso te será devuelto casi inmediatamente. Podemos verificar que se reservó la cantidad correcta de espacio escribiendo:

Habilitando el archivo de swap

En este momento, nuestro archivo está creado, pero nuestro sistema no sabe que se supone que debe utilizarse para el swap. Necesitamos decirle a nuestro sistema que formatee este archivo como swap y luego habilitarlo.

Sin embargo, antes de hacer eso, necesitamos ajustar los permisos en nuestro archivo para que nadie más pueda leerlo, además de root. Permitir que otros usuarios lean o escriban en este archivo sería un gran riesgo para la seguridad. Podemos bloquear los permisos escribiendo:

Verifica que el archivo tenga los permisos correctos escribiendo:

Como puede ver, solo las columnas para el usuario root tienen habilitados los indicadores de lectura y escritura.

Ahora que nuestro archivo es más seguro, podemos decirle a nuestro sistema que configure el espacio de swap escribiendo:

Nuestro archivo ahora está listo para ser utilizado como un espacio de swap. Podemos habilitar esto escribiendo:

Podemos verificar que el procedimiento fue exitoso al verificar si nuestro sistema informa el espacio de swap ahora:

Tenemos un nuevo archivo de swap aquí. Podemos usar la utilidad free nuevamente para corroborar nuestros hallazgos:

Nuestro swap se ha configurado con éxito y nuestro sistema operativo comenzará a utilizarlo según sea necesario.

Hacer permanente el archivo de swap

Tenemos nuestro archivo de swap habilitado, pero cuando reiniciamos, el servidor no habilitará automáticamente el archivo. Podemos cambiar eso sin embargo modificando el archivo fstab.

Editar el archivo con privilegios de root en tu editor de texto:

En la parte inferior del archivo, debes agregar una línea que le indique al sistema operativo que use automáticamente el archivo que creaste:

Debes Guardar y cerrar el archivo cuando hayas terminado.

Ajustar tu configuración de swap

Hay algunas opciones que puedes configurar que tendrán un impacto en el rendimiento de tu sistema cuando trates con swap.

El parámetro swappiness configura la frecuencia con la que tu sistema intercambia datos de la RAM al espacio de swap. Este es un valor entre 0 y 100 que representa un porcentaje.

Con valores cercanos a cero, el kernel no intercambiará datos al disco a menos que sea absolutamente necesario. Recuerda, las interacciones con el archivo de swap son “caras”, ya que llevan mucho más tiempo que las interacciones con la RAM y pueden causar una reducción significativa en el rendimiento. En general, decirle al sistema que no confíe en swap hará que tu sistema sea más rápido.

Los valores que están más cerca de 100 intentarán intercambiar más datos en un esfuerzo por mantener más espacio en la memoria RAM. Dependiendo del perfil de memoria de tus aplicaciones o para qué estás usando tu servidor, esto podría ser mejor en algunos casos.

Podemos ver el valor de swappiness actual escribiendo:

Para un escritorio, una configuración de swappiness de 60 no es un mal valor. Para un sistema VPS, probablemente nos gustaría acercarlo a 0.

Podemos configurar la swappiness a un valor diferente usando el comando sysctl.

Por ejemplo, para establecer la velocidad en 10, podríamos escribir:

Esta configuración persistirá hasta el próximo reinicio. Podemos establecer este valor automáticamente al reiniciar agregando la línea a nuestro archivo /etc/sysctl.conf:

En la parte inferior, puedes agregar:

Guarda y cierra el archivo cuando hayas terminado.

Otro valor relacionado que podrías querer modificar es el vfs_cache_pressure. Esta configuración ajusta la cantidad que el sistema elegirá para almacenar en caché la información del inodo y de la matriz sobre otros datos.

Básicamente, se trata de datos de acceso sobre el sistema de archivos. En general, esto es muy costoso de buscar y se solicita con mucha frecuencia, por lo que es una cosa excelente para tu sistema de caché. Puedes ver el valor actual consultando nuevamente el sistema de archivos proc:

Como está configurado actualmente, nuestro sistema elimina la información de inodo de la memoria caché demasiado rápido. Podemos establecer esto en una configuración más conservadora como 50 escribiendo:

Nuevamente, esto solo es válido para nuestra sesión actual. Podemos cambiar eso agregándolo a nuestro archivo de configuración como lo hicimos con nuestra configuración de swappiness:

En la parte inferior, agrega la línea que especifica su nuevo valor:

Guarda y cierra el archivo cuando hayas terminado.

Conclusión

Seguir los pasos de esta guía te brindará un respiro en términos de uso de RAM. El espacio de intercambio es increíblemente útil para evitar algunos problemas comunes.

Si te encuentras con errores de OOM (sin memoria) o si tu sistema no puede utilizar las aplicaciones que necesitas, la mejor solución es optimizar las configuraciones de la aplicación o actualizar tu servidor. Sin embargo, la configuración del espacio de intercambio puede ser más flexible y puede ayudar a ganar tiempo en un servidor menos poderoso.