¿Qué es el filesystem /dev/shm de Linux y cómo configurarlo?

/dev/shm no es más que la implementación del concepto de «memoria compartida». Permite que los datos sean compartidos entre diferentes programas que corren en Linux de una manera eficiente.

Un programa puede reservar memoria a la que otros procesos pueden acceder, si se les permite. Esto acelerará a Linux.

shm/shmfs también puede llamarse tmpfs y se utiliza en Linux y UNIX para mejorar el rendimiento del sistema.

El dispositivo /dev/shm aparece como un filesystem en el sistema operativo pero, en realidad, está utilizando memoria física para que el sistema pueda realizar sus operaciones internas de una manera más rápida si lo comparamos con un sistema de archivos en disco, ya que la RAM es más rápida que el disco.

El nombre shm viene de Shared Memory y es una porción de memoria, estrictamente de uso interno por el sistema operativo. Básicamente, se almacenan segmentos de memoria y otros datos temporales que se utilizan para que diferentes dispositivos y aplicaciones se comuniquen con el kernel. Los datos almacenados ahí desaparecerán al reiniciar el sistema operativo.

¿Cuándo utilizar /dev/shm?

Para mejorar el rendimiento de las aplicaciones de software como Oracle, servidores WEB, almacenamiento de datos temporales, o el rendimiento general del sistema Linux, podemos utilizar /dev/shm, sobretodo cuando el sistema está muy cargado.

  Filesystems BTRFS en Linux

También podemos utilizar /dev/shm para solucionar algunos errores como el que recientemente me encontré. El equipo de Oracle quería aumentar el tamaño de la memoria SGA de una base de datos pero no pudo porque el tamaño del «filesystem» /dev/shm era demasiado pequeño. El error concreto que me pasaron fue:

The error message ORA-00845 addresses this error:
ORA-00845: MEMORY_TARGET not supported on this system
Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized correctly on Linux.
Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each Oracle instance running on the system.

Como podemos comprobar, Oracle utiliza la memoria física del sistema para agilizar ciertas operaciones de la base de datos.

Crear un filesystem tmps en GNU Linux

No obstante, este filesystem no es de uso exclusivo para Oracle. También es muy utilizado por el propio sistema operativo e, incluso, lo podemos configurar para que sea utilizado por otras aplicaciones como, por ejemplo, el almacenamiento de caché de un servidor WEB o el directorio del propio plugin WP Super Caché o LiteSpeed Cache en el que almacena los datos temporales. Ejemplo:

[[email protected] ~]# grep tmpfs /etc/fstab
tmpfs   /app/puerto53/html/wp-content/cache     tmpfs   size=20M,noatime,uid=50000,gid=50000,mode=770   0 0
tmpfs   /app/hervidores/html/wp-content/cache   tmpfs   size=20M,noatime,uid=50004,gid=50004,mode=0770  0 0
tmpfs   /app/parqueinfantil/html/wp-content/cache       tmpfs   size=20M,noatime,uid=50005,gid=50005,mode=0770  0 0
tmpfs   /app/keepcalm/html/wp-content/cache     tmpfs   size=20M,noatime,uid=50006,gid=50006,mode=0770  0 0
tmpfs   /app/silladeruedas/html/wp-content/cache        tmpfs   size=20M,noatime,uid=50007,gid=50007,mode=0770  0 0
tmpfs   /app/transpaleta/html/wp-content/cache  tmpfs   size=20M,noatime,uid=50008,gid=50008,mode=0770  0 0
tmpfs   /app/botellas/html/wp-content/cache     tmpfs   size=20M,noatime,uid=50009,gid=50009,mode=0770  0 0
[[email protected] ~]#

[[email protected] ~]# df -hP  |egrep "Filesystem|tmpfs"
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        864M     0  864M   0% /dev
tmpfs           901M  4.0K  901M   1% /dev/shm
tmpfs           901M   17M  884M   2% /run
tmpfs           901M     0  901M   0% /sys/fs/cgroup
tmpfs            20M     0   20M   0% /app/puerto53/html/wp-content/cache
tmpfs            20M     0   20M   0% /app/silladeruedas/html/wp-content/cache
tmpfs            20M     0   20M   0% /app/hervidores/html/wp-content/cache
tmpfs            20M     0   20M   0% /app/transpaleta/html/wp-content/cache
tmpfs            20M     0   20M   0% /app/keepcalm/html/wp-content/cache
tmpfs            20M     0   20M   0% /app/parqueinfantil/html/wp-content/cache
tmpfs            20M     0   20M   0% /app/botellas/html/wp-content/cache
tmpfs           181M     0  181M   0% /run/user/1000
[[email protected] ~]#

En las opciones de montaje del fstab que acabamos de ver, podemos comprobar que el tamaño del FS tmps es de 20M en todos los casos, además, añadimos algunos atributos adicionales, como el usuario y grupo de sistema que ha de poder acceder al sistema de archivos temporal y la máscara (chmod).

  Tutorial de Ansible

Modificando el tamaño del filesystem tmpfs

Para aumentar el tamaño de /dev/shm, simplemente modifiqué el fichero /etc/fstab con el tamaño que nos interesaba:

[[email protected] ~]# grep shm /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=16g 0 0
[[email protected] ~]# mount -o remout /dev/shm
[[email protected] ~]# df -hP |grep shm
tmpfs 16G 2.7G 14G 17% /dev/shm
[[email protected] ~]#

Una vez modificado el tamaño del FS en el fichero fstab, remontaremos el filesystem con el comando:

mount -o remount,rw /dev/shm

Ejemplo de uso: Mejorar el rendimiento de la caché de WordPress

El acceso a los datos a la memoria RAM es muchísimo más rápido que el acceso a los mismos datos si están en disco, así que para mejorar el rendimiento de carga de mi blog de WordPress hago dos cosas:

  1. Instalo un plugin de caché como WP Super Cache o el LiteSpeed Cache.
  2. Configuro el sistema de archivos wp-content/cache para que utilice memoria física y no un filesystem de disco.

Este segundo punto tiene que ver más con la configuración del sistema de archivos de Linux. En mi caso, utilizo Centos y lo hago de la siguiente manera:

[root]# grep wp-content /etc/fstab
tmpfs /var/www/vhosts/puerto53.com/httpdocs/wp-content/cache tmpfs defaults,size=200M,noatime 0 0
[root]#

[root]# df -hP |grep wp-content
tmpfs 200M 604K 200M 1% /var/www/vhosts/puerto53.com/httpdocs/wp-content/cache
[root]#

Como vemos, ahora tenemos un filesystem de 200MB con datos directamente cargados en memoria RAM.

Si queremos montar el sistema de archivos con un usuario y grupo propietarios concretos y permisos específicos, configuraremos el fichero fstab con las siguientes opciones:

# grep tmpfs /etc/fstab
tmpfs /var/www/vhosts/puerto53.com/httpdocs/wp-content/cache tmpfs size=30M,noatime,uid=50000,gid=50000,mode=770 0 0

Te puede interesar

Comparativa de Hostings VPS

Compárteme

Contenido Relacionado

Deja un comentario