root: fork failed: Cannot allocate memory

En uno de los servidores que administro me ha ocurrido que no podía entrar con SSH ni ejecutar procesos en remoto a través de un software que tiene un agente instalado, etc. dando el error root: fork failed: Cannot allocate memory.

Linux - cannot allocate memory

Sin embargo, la aplicación del usuario no se estaba viendo afectada.

Al prinipio pensé que habíamos alcanzado el límite de PIDs que el sistema puede crear pero no fue así, como veremos más tarde. No obstante, os dejo el procedimiento para aumentar este valor:

Aumentar el número de PIDs en Linux RedHat

Para aumentar el número de identificadores de proceso o PIDs, configuraremos el parámetro del kernel apropiado:

sysctl -w kernel.pid_max=1000000

[root ~]# grep -i pid /etc/sysctl.conf
kernel.pid_max=1000000
[root ~]#

El problema, es que he tenido que rebotar el servidor, ya no podía acceder a él.

Más información en la documentación oficial de RedHat:

Número Máximo de Ficheros Abiertos

Una vez que puede acceder al servidor, saqué algunas gráficas de procesos y ficheros abiertos. Lo que vi fue que unos pocos procesos abrieron muchos ficheros en el sistema, llegando a alcanzar el límite de 65536 (open files):

[root]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 579334
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[root]#
Linux open files
Número de ficheros abiertos

La explicación de que el usuario root tuviera tantos ficheros abiertos es que el proceso de dockers abría muchos ficheros que son del usuario root, como librerías compartidas del sistema.

La solución pasa por limitar el número máximo de procesos y ficheros que puede abrir el proceso de dockers, garantizando el buen funcionamiento de la aplicación pero evitando que se colapse el sistema operativo.

Por lo tanto, podemos configurar el fichero /etc/security/limits.conf (RedHat 7) de la siguiente manera:

#Parametros para Dockers – Número de procesos corriendo
docker soft nproc 1024
docker hard nproc 10000
#Parametros para Dockers – Número de ficheros abiertos
docker soft nofile 15000
docker hard nofile 50000

Y no limitar los procesos o ficheros abiertos que puede abrir el root, con el fin de que podamos establecer una conexión SSH en el sistema, en caso de que tengamos que matar algún proceso de la aplicación que se haya desmadrado.

[root ]# grep -i ulimit /root/.bash_profile
ulimit -n 1000000
ulimit -u 1000000
[root]#

¿Te ha gustado? ¡Compártelo!

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

Deja un comentario

Tal vez también te gustaría leer...

RHEL y Oracle RAC – Paquetes Dropped

En un entorno de dos servidores Linux RedHat 6.9 con un cluster de Oracle RAC, hemos detectado muchos paquetes dropped en las tarjetas de red (dropped: 311815750): El equipo de Oracle ejecuta un análisis del sistema (OSWatcher) donde se indica que debemos aumentar el valor de MTU de todos los nodos del cluster, y así

Leer más »

lun4194304 has a LUN larger than allowed by the host adapter

En un RedHat 7.6 he pedido una LUN para ampliar un filesystem. Esta es una tarea rutinaria de cualquier técnico de sistemas Linux, si embargo, hoy me he encontrado con que la LUN estaba asignada al servidor pero no la veía. En el log del sistema operativo (/var/log/messages) aparecía el siguiente mensaje: Es decir, que

Leer más »

systemd: Unit XXX is bound to inactive unit XXX

Me encontraba moviendo un filesystem LVM desde los discos locales a un disco de la SAN pero no podía montarlo. En este caso, el FS todavía no estaba siendo utilizado por nadie, ya que era para un proyecto pendiente de entrega, por lo que no necesito realizar ninguna copia de seguridad previa. Rebajas Logitech B100

Leer más »

RedHat – Semaphores exhausted

Esta mañana me he encontrado con una alerta en un servidor RedHat 6, cuyo mensaje de error era: He podido entrar correctamente al servidor pero al ejecutar algunos comandos, se quedaban colgados sin responder jamás. Teclado Mecánico Gaming de VicTsing, 104 Teclas y… 39,88 EUR Comprar en Amazon Logitech G413 Mechanical Gaming Keyboard – Carbon…

Leer más »

No arrancan las VMWare Tools

Estaba haciendo una actualización de las VMWare Tools en 300 servidores RedHat 6 y en tres de ellos no me arrancaron. Tabla de contenidos1 Script de actualización masivo2 Error que me daba al arrancar las VMWare Tools3 ¿Cómo consigo arrancar las VMWare Tools, finalmente?4 ¿Cómo me di cuenta del error? Script de actualización masivo Si

Leer más »

Error de NFS – server XXX not responding, timed out

Recientemente he tenido una incidencia con un servidor de NFS de preproducción en el que durante unos segundos el cliente de NFS perdía la conectividad, afectando a una aplicación muy sensible o, traduciéndolo de otra manera, mal desarrollada: Para solucionarlo, aumenté el timeout en el que el cliente de NFS va a seguir intentando acceder

Leer más »