2012-02-20 29 views
54

Qual è il limite massimo al numero di processi possibili in un sistema Linux? Come possiamo trovarlo?Numero massimo di processi in linux

+0

Stack Overflow è un sito per domande di programmazione e sviluppo. Questa domanda sembra essere fuori tema perché non riguarda la programmazione o lo sviluppo. Vedi [Quali argomenti posso chiedere qui] (http://stackoverflow.com/help/on-topic) nel Centro assistenza. Forse [Super User] (http://superuser.com/) o [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sarebbe un posto migliore dove chiedere. – jww

risposta

45

vostro kernel dovrebbe esportare queste informazioni in procfs:

cat /proc/sys/kernel/pid_max 

Questo è il numero massimo di identificatori processo unico sistema in grado di supportare.

Poiché si tratta di un file, lo /proc/sys/kernel/pid_max può essere controllato da qualsiasi linguaggio di programmazione in grado.

+2

questo può essere vero, ma nelle distro più belle questo è limitato da /etc/security/limits.conf che può filtrare il numero massimo di processi su base utente/gruppo/dominio. – AoeAoe

+1

'ulimit' potrebbe limitare i processi max per utente a meno del massimo pid, e da un po 'di googling, ci sono anche altre limitazioni in gioco (ma non ho trovato nessuna fonte definitiva da confermare, come LKML o un Dev ben noto che lo pubblica). – Kitsune

+1

'int fd = read ("/proc/sys/kernel/pid_max ");' non è valido, né è valido per nessun altro file. – immibis

20

sysctl kernel.pid_max

o

cat/proc/sys/kernel/pid_max

Come suggerito da Ninefingers.

Per completezza, è possibile cambiare temporaneamente scrivendo a/proc/syskernel/pid_max o permanente con l'aggiunta di:

kernel.pid_max = 4194303

a /etc/sysctl.conf . 4194303 è il limite massimo per x86_64 e 32767 per x86.

+3

ha appena provato 'sysctl kernel.pid_max = 4194304' e ha avuto successo (Linux 3.10.25) –

+0

@ zed_0xff a patto che tu sappia che la modifica non è persistente è tutto ok! –

+0

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

16

Risposta breve alla tua domanda: il numero di processi possibili nel sistema linux è ILLIMITATO.

Ma esiste un limite al numero di processi per utente (tranne root che non ha limiti).

E puoi controllare i tuoi limiti utente con il comando seguente (apposito a "max processi utente").

$ 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 

Se si desidera aumentare il limite sul numero di processi per un particolare utente (ad esempio: Hadoop), è necessario effettuare sotto voce nel /etc/security/limits.conf

hadoop - nproc 500000 
+0

A volte la modifica sopra richiede un riavvio per ottenere la modifica in vigore. –

+1

Questo richiede una citazione per il numero è 'illimitato', per ulimit significa che non ha un limite impostato (illimitato), ma il numero di processi che lo schedulatore è permesso non è illimitato ... come in infinito. L'ulimit non era la domanda. – hpavc

+0

il kernel ha un limite rigido di 4 mln, penso che –

5

kernel.pid_max è un fattore limitante, ma almeno altrettanto importante è kernel.threads-max. Vale la pena notare che il valore predefinito di nproc per ogni utente è kernel.threads-max diviso per due e che ogni thread conta per il limite di nproc di un utente. Pertanto, "ps -u $ USER" potrebbe far sembrare che un utente non abbia esaurito il limite di nproc, ma "ps -L -u $ USER" potrebbe raccontare una storia molto diversa.

Problemi correlati