miércoles, 19 de marzo de 2014

fork: Resource temporarily unavailable

Todos los usuarios en linux tienen asignados un número de procesos máximo que puede tener en ejecución de manera simultánea. Cuando llegamos al máximo de procesos lanzados, el sistema nos lanzará un error del tipo fork: retry: Resource temporarily unavailable o fork: Resource temporarily unavailable.
Podemos comprobar el número de procesos simultáneos que puede tener un usuario, lanzando el comando ulimit -u, dado un resultado como este:


[user@sr ~]$ ulimit -u
1024

Cuando el usuario user tenga 1025 procesos simultáneos lanzados y quiera lanzar uno más, dará un error fork: Resource temporarily.
Para aumentar esto, tendremos que editar el fichero /etc/security/limits.conf e incluir al final las siguientes lineas:

user    hard  nproc    16384
user    soft  nproc    16384

Donde 16384 es el número de procesos simultáneos  máximo. Tras reiniciar la máquina, loggarnos con el usuario user y lanzar el comando ulimit -u este nos dará el siguiente resultado:

[user@sr ~]$ ulimit -u
16384
Para hacer esto, hay otra manera más rupestre, que es lanzar lo siguiente:
[root@server ~]# ulimit -u 16384
Al realizarlo, el número máximo de procesos simultáneos se modifica a 16384 pero solo para la sesión en curso, si queremos que esto sea persistente para un usuario podríamos meter el comando ulimit -u 16384 en el .bashrc de cada usuario pero esto complica mucho la manera estándar de hacerlo y confunde la administración del servidor.

Además pongo un comando que os indicará para todos los usuarios del sistema los procesos activos que tienen:

ps -A -o pid,thcount,user,comm |tail -n +2|awk '{print $3" " $2}' | awk ' {arr[$1]+=$2} END {for (i in arr) {print  arr[i],i}}'

La salida será similar a esta:

[root@sr bin]# ps -A -o pid,thcount,user,comm |tail -n +2|awk '{print $3" " $2}' | awk ' {arr[$1]+=$2} END {for (i in arr) {print  arr[i],i}}'
17 gdm
1 ntp
1 rpc
1 dbus
3 68
3 rtkit
2 postfix
1 rpcuser
664 root

Donde el primer campo corresponde a los procesos activos y el segundo al nombre del usuario.

No hay comentarios:

Publicar un comentario