Administrar la Memoria Swap en OpenSolaris

Hace un buen tiempo que tenía un problema en OpenSolaris que me impedía ejecutar varias tareas al mismo tiempo. Al ejecutar una tercera o cuarta aplicación me aparecía un mensaje como el siguiente:

Could not launch menu item. Failed to fork child process (Not enough space)
Could not launch menu item. Failed to fork child process (Not enough space)

Después de investigar un rato en Internet, vine a caer en cuenta que posiblemente estaba falto de memoria swap… Para aumentar la memoria swap del sistema era necesario obtener información con el comando swap -l, ejecuté dicho comando, pero ¡oh sorpresa!, ni siquiera tenía un dispositivo swap configurado😮

Todo lo que hice y aprendí lo escribo a continuación…

El Volumen Swap

Para los que venimos de GNU/Linux al principio puede hacernos ruido el hecho de que la swap (o memoria de intercambio) esté administrada en la misma partición en la que está instalado el sistema operativo, sin embargo, esto cambia un poco cuando nos damos cuenta del poder del sistema de archivos de Solaris/OpenSolaris: ZFS, toda una chingonería. En OpenSolaris es necesario primero que nada tener un dispositivo configurado… Si al tipear en consola swap -l obtienes un horrible mensaje como este: No swap devices configured, entonces es necesario crear un área de intercambio:

Nos hacemos superusuario y después de eso creamos el nuevo dispositivo al que le daremos un tamaño de 512 megas:

$ pfexec su
# zfs create -V 512M rpool/swap

Activamos este volumen:

# swap -a /dev/zvol/dsk/rpool/swap

Y finalmente añadimos la entrada swap al archivo /etc/vfstab:

# echo "/dev/zvol/dsk/rpool/swap  -  -  swap  -  no  " >> /etc/fstab

Como puedes ver el directorio donde está alojado nuestro volumen swap es: /dev/zvol/dsk/rpool/swap. Si ahora ejecutamos un swap -l, obtendremos una respuesta como esta:

omar@omar:~# swap -l
swapfile             dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 182,1         8  4194288  4102296

Con lo hecho anteriormente al fin resolví mi inconveniente y pude ejecutar más de tres aplicaciones al mismo tiempo. Pero en vista de que nos hemos picado, vamos a seguir escribiendo de la memoria swap en OSol.

Redimensionar o eliminar la swap

Ahora bien, que tal si lo que realmente deseamos es incrementar el tamaño de nuestra swap, o disminuirlo quizás. Antes de hacer cualquier cosa, hay que saber si nuestra memoria swap está en uso ejecutando un swap -l.

omar@omar:~# swap -l
swapfile             dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 182,1         8  4194288  4194288

Si las columnas blocks y free son iguales, entonces nuestra memoria de intercambio NO está en uso; lo que quiere decir que es posible redimensionar el tamaño del volumen swap o incluso eliminarlo.

Pues bien, para aumentar/disminuir el tamaño, usaremos la opción set volsize, especificando el tamaño en megas o gigas:

# zfs set volsize=254M rpool/swap

Si queremos comprobar esos cambios, entonces usaremos la opción get volsize:

# zfs get volsize rpool/swap

Si nuestro dispositivo swap está en uso, o sea, la columna blocks != free, entonces NO es posible redimensionar o eliminar el volumen swap… o al menos eso es lo que nos dice la teoría, ya que al redimensionar con la swap en uso, el sistema responde sin errores (aparentemente):

resize swap in use
Redimensionando la swap en uso, algo que aparentemente no es posible

De todos modos es sabio seguir las indicaciones tal y como dice la teoría… Así que si queremos más espacio swap y el que tenemos está en uso; lo ideal sería crear otro volumen, digamos swap-two. Suponiendo que pasa el tiempo y ya no es necesario tener ese volumen ¿cómo lo eliminamos?

Eliminar un volumen swap

omar@omar:~# swap -l
swapfile             dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 182,1         8  4194288  3674208
/dev/zvol/dsk/rpool/swap-two 182,3         8  1048568  1048568

Lo primero que hacemos es decirle al sistema que ya no usaremos más el volumen swap-two:

omar@omar:~# swap -d /dev/zvol/dsk/rpool/swap-two

Pero aún no hemos recuperado el espacio en disco que ocupaba la swap, por lo tanto, será necesario eliminar la entrada en el archivo /etc/vfstab y remover el archivo swap-two en el directorio /dev/zvol/dsk/rpool/. Hemos eliminado el dispositivo swap.

Si les interesa adentrarse más en este rollo de la swap en OSol y ZFS, existen dos buenos manuales que pueden buscar en la documentación de Oracle:

  • System Administration Guide Device and File Systems y
  • Solaris ZFS Administration Guide

Por ahora eso es todo, aunque en el camino surgieron algunas dudas con los dispositivos dump. Pero eso (quizás) lo explicaré en otro post😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s