Aproveche funcionalidad de Disco RAM
Introducción
Existen muchas aplicaciones que utilizan archivos temporales, para comunicación entre procesos o como "spool" o cola. En algunos casos podemos mejorar tiempos de respuesta de la aplicación si utilizamos el disco RAM definido por defecto en muchas distribuciones Linux, centrándonos en el caso de CentOS.
Debemos tener presente, que su uso también dependerá de la RAM instalada y disponible en el sistema, dado que si se abusa, aumentaremos las necesidades de RAM, forzando al sistema a utilizar el área de swap, afectando el rendimiento general de nuestro servidor.
Descripción
Si miramos los discos definidos en nuestro sistema con el comando df -k
, veremos
un punto de montaje que seguramente no recordamos haberlo definido, se trara de /dev/shm
.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_myserver-lv_root
5716804 4950788 475612 92% /
tmpfs 775364 228 775136 1% /dev/shm
/dev/sda1 495844 122718 347526 27% /boot
tmpfs 1048576 12 1048564 1% /tmp
/dev/sdb1 4128428 1979256 1939460 51% /home
/dev/sdb2 4128428 2225148 1693568 57% /var
Por defecto dicho espacio se define a la mitad de RAM disponible, la que se asigna en forma dinámica a medida que se requiere. Deberemos tener en consideración que todos los datos almacenados aquí desaparecen al momento de reiniciar el servidor, incluyendo todos los directorios definidos, por ello que se justifica como almacenamiento temporal, y si decidimos dejar un directorio para utilizar por alguna aplicación, deberemos asegurarnos de validar su existencia y crearlo en caso que no exista al momento de iniciar el servicio.
Lo que se busca es tener un acceso rápido, por una parte para encontrar el archivo, lo que se conoce como access time, relevante cuando se utilizan múltiples archivos de tamaño muy bajo (menor a los 256KB) y taza de transferencia, significativo cuando los archivos son de mayor tamaño.
Tenga presente que los datos se almacenan en RAM, por lo que el espacio utilizado puede perjudicar la operación del servidor.
Como muestra de rendimiento me limitaré les presento una comparativa de taza de transferencia
obtenida con el comando dd
, considerando un archivo del órden de 1 GB para evitar
el efecto dado por el caché de disco utilizado por CentOS. Primeramente en un disco SATA
convencional, un SSD y finalmente el disco RAM.
65536+0 records in 65536+0 records out 1073741824 bytes (1,1 GB) copied, 17,02761 s, 63 MB/srm salida.dummy cd /myssd dd if=/dev/zero of=salida.dummy bs=16K count=64K
65536+0 records in 65536+0 records out 1073741824 bytes (1,1 GB) copied, 2,30734 s, 465 MB/srm salida.dummy cd /dev/shm dd if=/dev/zero of=salida.dummy bs=16K count=64K
65536+0 records in 65536+0 records out 1073741824 bytes (1,1 GB) copied, 0,758608 s, 1,4 GB/srm salida.dummy # CONFIGURACION CON RAM DUAL-CHANNEL cd /dev/shm dd if=/dev/zero of=salida.dummy bs=16K count=64K
65536+0 records in 65536+0 records out 1073741824 bytes (1,1 GB) copied, 0,690483 s, 1,6 GB/srm salida.dummy
Recuerde ejecutar los comando rm salida.dummy
indicados, para evitar dejar archivos basura
en el sistema.
Uso Práctico: Sesiones PHP
Un buen uso que se le puede dar a éste tipo de filesystem, es el espacio de almacenamiento de las sesiones PHP.
Podemos modificar el archivo /etc/php.ini
definiendo el directorio para almacenar la
información de las sesiones simplemente como session.save_path = "/dev/shm"
,
lo que puede ser adecuado si se manejan pocas sesiones, o mejor aun
session.save_path = "/dev/shm/php/sessions"
, pero deberemos asegurarnos de crear dicho
directorio, y cambiar sus permisos al iniciar apache, lo que podrímos incluir al final del
archivo /etc/sysconfig/httpd
como:
...
PHPSESSIONSDIR=/dev/shm/php/sessions
if [ ! -d $PHPSESSIONSDIR ]
then
mkdir -p $PHPSESSIONSDIR
chown -R apache:apache $PHPSESSIONSDIR
fi
Configuración
Tenemos la opción de modificar el tamaño definido por defecto, o incluso crear
uno nuevo con los parámetros dados, mediante el archivo /etc/fstab
.
La opción size nos permite definir el tamaño máximo a utilizar, el que puede
ser definido con los sufijos K para Kilobytes, M para Megabytes, G para Gigabytes o
% donde se considera el porcentaje de la RAM del sistema.
... tmpfs /dev/shm tmpfs size=25%,defaults 0 0 tmpfs /var/lib/php/session tmpfs uid=apache,mode=600,size=100M,defaults 0 0
Con ello definimos el espacio máximo de /dev/shm
al 25% de RAM y el directorio
/var/lib/php/session
como un disco RAM de 100 MegaBytes
con usuario apache como dueño y permisos 600, lo que podría ser una definición
más limpia que el asegurar la creación del directorio en cada arranque. Eso si hay que procurar
que el directorio exista y se encuentre vacío para que pueda ser montado.
Generado por Sistema y almacenado en cache
Wyzer Luis Hernán de la Barra |
|
Teléfono: | +56995451689 |
WhatsApp: | +56995451689 |
E-Mail: | info@wyzer.cl |
Web: | www.wyzer.cl |