2012-02-20 39 views
54

¿Cuál es el límite máximo de la cantidad de procesos posibles en un sistema Linux? ¿Cómo podemos encontrarlo?Número máximo de procesos en Linux

+0

Stack Overflow es un sitio que sirve para ver programación o desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte [Qué temas puedo preguntar aquí] (http://stackoverflow.com/help/on-topic) en el Centro de ayuda. Tal vez [Superusuario] (http://superuser.com/) o [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sería un mejor lugar para preguntar. – jww

Respuesta

45

su núcleo debe exportar esta información en procfs:

cat /proc/sys/kernel/pid_max 

Este es el número máximo de identificadores de proceso únicas su sistema puede soportar.

Dado que es un archivo, /proc/sys/kernel/pid_max se puede inspeccionar desde cualquier lenguaje de programación capaz.

+2

esto puede ser cierto, pero en la mayoría de las distribuciones agradables esto está limitado por /etc/security/limits.conf, que puede filtrar la cantidad máxima de procesos por usuario/grupo/dominio. – AoeAoe

+1

'ulimit' podría limitar los procesos máx. Por usuario a menos del máximo pid, y de un poco de Google, también hay otras limitaciones en juego (pero no pude encontrar ninguna fuente definitiva para confirmar, como LKML o un conocido Dev que lo publica). – Kitsune

+1

'int fd = read ("/proc/sys/kernel/pid_max ");' no es válido, ni es válido para ningún otro archivo. – immibis

20

sysctl kernel.pid_max

o

cat/proc/sys/kernel/pid_max

Como sugiere Ninefingers.

Para completar, se puede cambiar temporalmente escribiendo en/proc/syskernel/pid_max o permanentemente añadiendo:

kernel.pid_max = 4194303

a /etc/sysctl.conf . 4194303 es el límite máximo para x86_64 y 32767 para x86.

+3

acaba de probar 'sysctl kernel.pid_max = 4194304' y tuvo éxito (Linux 3.10.25) –

+0

@ zed_0xff, siempre que sepa que el cambio no es permanente, ¡todo está bien! –

+0

'printf '% x \ n' 4194303' da' 3fffff' – Tino

16

Respuesta breve a su pregunta: La cantidad de proceso posible en el sistema Linux es ILIMITADO.

Pero hay un límite en el número de procesos por usuario (excepto en la raíz que no tiene límite).

Y puede verificar los límites de sus usuarios con el siguiente comando (apostar a "max user processes").

$ 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) 256447 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 128000 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 10240 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 500000 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

Si desea aumentar el límite en el número de proceso para un usuario en particular (por ejemplo: hadoop), debe hacer a continuación en la entrada /etc/security/limits.conf

hadoop - nproc 500000 
+0

A veces el cambio anterior requiere un reinicio para que el cambio entre en vigencia. –

+1

Esto supone una cita para el número es 'ilimitado', para ulimit significa que no tiene un límite establecido (ilimitado), pero el número de procesos que el planificador está permitido no es ilimitado ... como en infinito. El ulimit no era la pregunta. – hpavc

+0

el núcleo tiene un límite estricto de 4 mln Creo que –

5

kernel.pid_max es un factor limitante, pero al menos tan importante es kernel.threads-max. Vale la pena señalar que el ulimit nproc predeterminado para cada usuario es kernel.threads-max dividido por dos, y que cada subproceso cuenta para el límite de nproc de un usuario. Por lo tanto, "ps -u $ USER" puede hacer parecer que un usuario no ha agotado su límite nproc, pero "ps -L -u $ USER" podría contar una historia muy diferente.

Cuestiones relacionadas