Muy rara vez puede ocurrir que un servidor se vea colapsado a tal punto que el acceso por consola o remoto se vea interrumpido y el resto de los servicios que prestan se hagan inaccesible. Este tipo de falla podría originarse de diversas causas que puede ser un tema interesante en este Blog.
Sin embargo, para no salir del tema que quiero citar aquí, sólo mencionaré algunas de las posibles razones que suele pasar por la mente de un Administrador de Sistemas u otras personas que sean responsables de mantener un servidor, tales como; un disco duro fallido, que el sistema haya sido atacado por un hacker, se daño el LVM d) el Firewall está bloqueando los puertos.
Pero como dije al principio, rara vez puede ocurrir y menos pensar que la falla se debe a la memoria, es decir, “se agotó la memoria RAM” e incluso la memoria swap. Esto compromete el sistema de paginación de memoria del servidor –obviamente– lo que origina que los servicios que se corren en el servidor no puedan gestionarse. Casi todo se detiene.-
Un caso ejemplo; un servidor de correos que maneja una diversidad de servicios que operan al unísono y que tienen la tarea de atender peticiones concurrentes, del MTA, Apache, PHP, servicio Webmail, anti-spam, antivirus, MySql, entre otros.
Solución 1: agregar memoria RAM adicional
Sin embargo, en un momento dado que no cuentas con partes o piezas que puedas usar como spare, y sabes que el servidor tiene instalada una cantidad de memoria relativamente aceptable –mas de 3 Gb– entonces puedo optar por buscar otra solución si la situación se debe a que el sistema operativo no reconoce mas allá de esta cantidad de memoria.
Solución 2: Instalar y arrancar con un Kernel que haga un uso mas extensivo de memoria”
En Linux, puedes optar por varios Kernel del tipo “bigmem”
root@mail:~# aptitude search linux-image|grep bigmem p linux-image-2.6-686-bigmem - Linux kernel 2.6 image on PPro/Celeron/PII p linux-image-2.6-686-bigmem-etch - Linux 2.6-etchnhalf image on PPro/Celeron/ p linux-image-2.6.18-4-686-bigmem - Linux 2.6.18 image on PPro/Celeron/PII/PII p linux-image-2.6.18-5-686-bigmem - Linux 2.6.18 image on PPro/Celeron/PII/PII i linux-image-2.6.18-6-686-bigmem - Linux 2.6.18 image on PPro/Celeron/PII/PII p linux-image-686-bigmem - Linux kernel image on PPro/Celeron/PII/PII
Ah, pero si eso no es posible arrancar el sistema con un kernel de tipo bigmem, porque otra limitación con que te enfrentas es que la plataforma instalada –Zimbra, por citar un ejemplo- se programó con una configuración de memoria específica y un kernel base, entonces sugiero:
Solución 3: Ampliar la memoria Swap
Para lograr esto, podría sugerir inmediatamente que uses alguna herramienta de particionado basado en Gparted y así ampliar tu partición swap, ya que hoy día es tan simple hacerlo de manera gráfica. Sin embargo, cambiar el tamaño de tu partición en un sistema que está en producción es un cambio severo que podría afectar todo el servidor.
Para lograr aumentar la memoria swap, lo haremos de una manera simple tan solo agregando un archivo. Tan simple que usaré el entorno de trabajo favorito para mi; una consola de comandos
En primer lugar, verifico cuanta espacio de memoria swap hay en el servidor;
root@mail:~# swapon -s Filename Type Size Used Priority /dev/cciss/c0d0p12 partition 979924 679472 -1
Los números bajo “Size” y “Used” están en Kilobytes. En este sistema usamos aproximadamente 680 Mb de 979 Mb de memoria Swap —y en este instante la carga del servidor ha bajado debido al horario de trabajo.
Se necesita un archivo auxiliar de memoria swap
Ahora, conocer cuanto espacio en disco hay disponible para averiguar donde ponerlo. Ejecutaré el comando “df” –disminutivo de “disk free”– desde la de línea de comandos para genera una salida así:
root@mail:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p5 6.5G 1.5G 4.7G 24% / tmpfs 1.7G 0 1.7G 0% /lib/init/rw udev 10M 96K 10M 1% /dev tmpfs 1.7G 0 1.7G 0% /dev/shm /dev/cciss/c0d0p13 64G 180M 60G 1% /backup /dev/cciss/c0d0p1 92M 19M 69M 22% /boot /dev/cciss/c0d0p6 6.5G 3.7G 2.5G 61% /home /dev/cciss/c0d0p10 16G 174M 15G 2% /opt /dev/cciss/c0d1p1 673G 176G 361G 33% /opt/zimbra /dev/cciss/c0d0p9 6.5G 214M 5.9G 4% /tmp /dev/cciss/c0d0p7 6.5G 464M 5.7G 8% /usr /dev/cciss/c0d0p8 6.5G 994M 5.2G 16% /var /dev/cciss/c0d0p11 23G 1.5G 21G 7% /var/log
El switch “-h” usado aquí para quienes no conozcan su uso. Se utiliza ampliamente en varios comando de Unix o Linux para mostrar la salida en un formato –human-readable– legible, tal como lo reseña el “man df” o “man ls”.
Ahora bien, vemos que entre todas las particiones disponible existe /backup que cuenta con suficiente espacio libre y no ha sido utilizado ni siquiera en un 50%. Tomaré esta partición para crear allí el archivo auxiliar de –swapping– memoria swap.
Para crear el archivo, usaré el comando “dd” –data dump– de manera cuidadosa.
root@mail:~# dd if=/dev/zero of=/backup/extraswap bs=1M count=2048 2048+0 records in 2048+0 records out 2147483648 bytes (2.1 GB) copied, 32.8718 seconds, 65.3 MB/s
He utilizado 2048 en el “count” para crear un archivo de 2 Gb. Los disminutivo “if” y “of” indican “infile” y “outfile”, archivo entrante y archivo de salida. El argumento “/dev/zero” nos dará una salida en blanco al archivo de salida.
Reviso la partición en “/backup” y tengo esto:
root@mail:~# ls -lpa /backup/ total 2099220 -rw-r--r-- 1 root root 2147483648 2009-10-28 16:31 extraswap drwx------ 2 root root 16384 2009-04-07 14:34 lost+found
Ahora que cuento con un archivo en disco, necesito prepararlo para que sea usado como una partición swap.
root@zmail:~# mkswap /backup/extraswap Setting up swapspace version 1, size = 2147479 kB no label, UUID=1ea42c4e-2d62-456a-b0f4-b35abc7bad12
He usado el comando “mkswap” cuidadosamente en hacer referencia al archivo en la partición “/backup” y con esto logro que se convierta en un archivo consumible para el Kernel de Linux en modo swap.
Para activar este nuevo archivo de partición, ejecuto:
root@mail:~# swapon /backup/extraswap
Reviso cuando memoria swap existe ahora;
root@zmail:~# swapon -s Filename Type Size Used Priority /dev/cciss/c0d0p12 partition 979924 679472 -1 /backup/extraswap file 2097144 0 -2
Con esto se ha comprobado que el Kernel de Linux está utilizando más memoria auxiliar. Sin embargo, no he terminado. Es necesario hacer este cambio permanente, editando el archivo “/etc/fastab”.
Si se reinicia el servidor ahora, este archivo auxiliar de swap no estará activo, y tendré que utilizar de nuevo “ swapon /backup/extraswap”.
Primero hago una copia de la manera como guste o sea conveniente.
root@zmail:~# cp /etc/fstab /backup/
root@zmail:~# ls /backup/ -lpa total 2099232 drwxr-xr-x 3 root root 4096 2009-10-28 16:43 ./ drwxr-xr-x 22 root root 4096 2009-10-08 13:15 ../ -rw-r--r-- 1 root root 2147483648 2009-10-28 16:39 extraswap -rw-r--r-- 1 root root 1018 2009-10-28 16:43 fstab drwx------ 2 root root 16384 2009-04-07 14:34 lost+found/
root@zmail:~# cp /etc/fstab /etc/fstab.backup-281009
root@zmail:~# ls -lpa /etc/fstab* -rw-r--r-- 1 root root 1018 2009-04-07 16:01 /etc/fstab -rw-r--r-- 1 root root 1018 2009-10-28 16:44 /etc/fstab.backup-281009
Yo he realizado dos copias en dos directorios diferentes. —por si acaso– y también la he verificado ambas.
Veamos que hay en “/etc/fstab”:
root@zmail:~# cat /etc/fstab # /etc/fstab: static file system information. # # proc /proc proc defaults 0 0 /dev/cciss/c0d0p5 / ext3 defaults,errors=remount-ro 0 1 /dev/cciss/c0d0p13 /backup ext3 defaults 0 2 /dev/cciss/c0d0p1 /boot ext3 defaults 0 2 /dev/cciss/c0d0p6 /home ext3 defaults 0 2 /dev/cciss/c0d0p10 /opt ext3 defaults 0 2 /dev/cciss/c0d1p1 /opt/zimbra ext3 defaults 0 2 /dev/cciss/c0d0p9 /tmp ext3 defaults 0 2 /dev/cciss/c0d0p7 /usr ext3 defaults 0 2 /dev/cciss/c0d0p8 /var ext3 defaults 0 2 /dev/cciss/c0d0p11 /var/log ext3 defaults 0 2 /dev/cciss/c0d0p12 none swap sw 0 0 /dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0
Ahora, edito el “/etc/fstab” para agregar el punto de montaje del archivo auxiliar swap justo debajo de la línea del swap, de este modo:
/backup/extraswap none swap sw 0 0
Guardo los cambios en el archivo y para comprobar que el cambio no contiene errores;
root@zmail:~# cat /etc/fstab # /etc/fstab: static file system information. # # proc /proc proc defaults 0 0 /dev/cciss/c0d0p5 / ext3 defaults,errors=remount-ro 0 1 /dev/cciss/c0d0p13 /backup ext3 defaults 0 2 /dev/cciss/c0d0p1 /boot ext3 defaults 0 2 /dev/cciss/c0d0p6 /home ext3 defaults 0 2 /dev/cciss/c0d0p10 /opt ext3 defaults 0 2 /dev/cciss/c0d1p1 /opt/zimbra ext3 defaults 0 2 /dev/cciss/c0d0p9 /tmp ext3 defaults 0 2 /dev/cciss/c0d0p7 /usr ext3 defaults 0 2 /dev/cciss/c0d0p8 /var ext3 defaults 0 2 /dev/cciss/c0d0p11 /var/log ext3 defaults 0 2 /dev/cciss/c0d0p12 none swap sw 0 0 /backup/extraswap none swap sw 0 0 /dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0
Ahora bien.!!. Después de todo lo que se ha hecho, puedo reiniciar el servidor ahora o dejarlo funcionado como tal. A este punto, he logrado solventar la carencia de memoria swap necesaria para mantener operativo un servidor.
Para futuras instalaciones, debería asignar mas espacio para la partición swap… o –preferiblemente– poner más memoria RAM en el servidor y antes de proceder a instalar y configurar las aplicaciones y los servicios, habilitar el Kernel tipo “bigmem”.
Hasta la próxima publicación… he perdido la oportunidad de irme a mi casa temprano para vacilarme mi película favorita: CSI Miami… –veré si llego a tiempo para ver LIFE.





