GNU/Linux >> Linux Esercitazione >  >> Linux

Numero massimo di thread per processo in Linux?

Linux non ha un limite di thread separati per processo, solo un limite al numero totale di processi sul sistema (i thread sono essenzialmente solo processi con uno spazio di indirizzi condiviso su Linux) che puoi visualizzare in questo modo:

cat /proc/sys/kernel/threads-max

Il valore predefinito è il numero di pagine di memoria/4. Puoi aumentarlo come:

echo 100000 > /proc/sys/kernel/threads-max

C'è anche un limite al numero di processi (e quindi di thread) che un singolo utente può creare, vedi ulimit/getrlimit per i dettagli relativi a questi limiti.


Questo è SBAGLIATO dire che LINUX non ha un limite di thread separati per processo.

Linux implementa indirettamente il numero massimo di thread per processo!!

number of threads = total virtual memory / (stack size*1024*1024)

Pertanto, il numero di thread per processo può essere aumentato aumentando la memoria virtuale totale o diminuendo la dimensione dello stack. Tuttavia, una riduzione eccessiva della dimensione dello stack può portare a un errore del codice a causa dell'overflow dello stack mentre la memoria virtuale massima è uguale alla memoria di scambio.

Controlla la tua macchina:

Memoria virtuale totale:ulimit -v (l'impostazione predefinita è illimitata, quindi è necessario aumentare la memoria di scambio per aumentarla)

Dimensione totale dello stack:ulimit -s (l'impostazione predefinita è 8 Mb)

Comando per aumentare questi valori:

ulimit -s newvalue

ulimit -v newvalue

*Sostituisci il nuovo valore con il valore che vuoi impostare come limite.

Riferimenti:

http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/


In termini pratici, il limite è solitamente determinato dallo spazio dello stack. Se ogni thread ottiene uno stack da 1 MB (non ricordo se questo è l'impostazione predefinita su Linux), allora un sistema a 32 bit esaurirà lo spazio degli indirizzi dopo 3000 thread (supponendo che l'ultimo GB sia riservato al kernel) .

Tuttavia, molto probabilmente si verificheranno prestazioni terribili se si utilizzano più di poche dozzine di thread. Prima o poi, si ottiene un sovraccarico eccessivo per il cambio di contesto, eccessivo sovraccarico nello scheduler e così via. (La creazione di un gran numero di thread non fa altro che consumare molta memoria. Ma molti thread con lavoro effettivo ti rallenterà mentre stanno lottando per il tempo di CPU disponibile)

Cosa stai facendo dove questo limite è persino rilevante?


Linux
  1. Linux:limite all'utilizzo della memoria per un singolo processo Linux?

  2. Recuperare l'utilizzo della CPU e l'utilizzo della memoria di un singolo processo su Linux?

  3. Limitazione dell'utilizzo della memoria/CPU del processo su Linux

  4. Numero massimo di file/directory su Linux?

  5. Come aumentare il numero massimo di thread JVM (Linux 64 bit)

Come trovare un nome di processo utilizzando il numero PID in Linux

I thread del kernel di Linux sono davvero processi del kernel?

Limita l'utilizzo della memoria per un singolo processo Linux

Come conoscere il numero di core di un sistema in Linux?

Memoria inattiva di Linux

quali processi killer ha Linux?