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.
Recientemente, me encontré con que el equipo de Oracle quería aumentar el tamaño de la 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é 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] ~]#
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