Hoy me he encontrado con una incidencia en que un usuario de Linux RedHat no tenía más recursos para ejecutar nuevas aplicaciones, dando el error «fork: retry: No child processes».
[root@server1 ~]# su - docker
Last login: Wed Mar 30 10:46:45 CEST 2022 from 10.29.155.95 on pts/3
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
Este error puede deberes a que el parámetro nproc del fichero limits.conf no está lo suficientemente dimensionado o que algún proceso se haya «desmadrado» y haya empezado a utilizar recursos del sistema sin parar.
Esta incidencia se corresponde al segundo caso. Para averiguarlo, he mirado cuántos recursos se estaban utilizando en el sistema:
[root@server1 ~]# lsof |grep docker |wc -l > /tmp/lsof.txt
Tras 15 minutos en ejecución el comando anterior, no me mostraba ningún resultado. Así que he decidido mirar cuántos threads estaba utilizando cada proceso del sistema y los he ordenado de mayor a menor.
[root@server1 ~]# ps -eLf |grep docker |awk '{print $2}' |uniq -c |sort -rnk1 |more
4060 800291
109 2240
27 792864
15 791931
12 785046
12 784731
Como podemos observar, el PID 800291 tiene 4060 threads en ejecución. El siguiente proceso de la lista tiene 109. Por lo tanto, el PID 800291 es un claro candidato al causante del problema.
Tras matar el proceso, ya podíamos volver a acceder con normalidad al sistema sin que diera el error «fork: retry: No child processes».
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,