GNU/Linux >> Tutoriales Linux >  >> Linux

¿Número máximo de subprocesos por proceso en Linux?

Linux no tiene un límite de subprocesos separados por proceso, solo un límite en la cantidad total de procesos en el sistema (los subprocesos son esencialmente solo procesos con un espacio de direcciones compartido en Linux) que puede ver así:

cat /proc/sys/kernel/threads-max

El valor predeterminado es el número de páginas de memoria/4. Puede aumentar esto como:

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

También hay un límite en la cantidad de procesos (y, por lo tanto, subprocesos) que un solo usuario puede crear, consulte ulimit/getrlimit para obtener detalles sobre estos límites.


Es INCORRECTO decir que LINUX no tiene hilos separados por límite de proceso.

¡Linux implementa el número máximo de subprocesos por proceso de forma indirecta!

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

Por lo tanto, la cantidad de subprocesos por proceso se puede aumentar aumentando la memoria virtual total o disminuyendo el tamaño de la pila. Sin embargo, disminuir demasiado el tamaño de la pila puede provocar fallas en el código debido al desbordamiento de la pila, mientras que la memoria virtual máxima es igual a la memoria de intercambio.

Revise su máquina:

Memoria virtual total:ulimit -v (el valor predeterminado es ilimitado, por lo que debe aumentar la memoria de intercambio para aumentar esto)

Tamaño total de la pila:ulimit -s (el valor predeterminado es 8Mb)

Comando para aumentar estos valores:

ulimit -s newvalue

ulimit -v newvalue

*Reemplace el nuevo valor con el valor que desea poner como límite.

Referencias:

http://dustycodes.wordpress.com/2012/02/09/aumento-del-número-de-hilos-por-proceso/


En términos prácticos, el límite suele estar determinado por el espacio de la pila. Si cada subproceso obtiene una pila de 1 MB (no recuerdo si ese es el valor predeterminado en Linux), entonces un sistema de 32 bits se quedará sin espacio de direcciones después de 3000 subprocesos (suponiendo que el último gb esté reservado para el kernel) .

Sin embargo, lo más probable es que experimente un rendimiento terrible si utiliza más de unas pocas docenas de subprocesos. Tarde o temprano, obtiene demasiada sobrecarga de cambio de contexto, demasiada sobrecarga en el programador, etc. (Crear una gran cantidad de subprocesos no hace más que consumir mucha memoria. Pero muchos subprocesos con trabajo real hacer lo ralentizará ya que están luchando por el tiempo de CPU disponible)

¿Qué estás haciendo donde este límite es incluso relevante?


Linux
  1. ¿Recuperar el uso de la CPU y el uso de la memoria de un solo proceso en Linux?

  2. Limitar el uso de memoria/CPU de proceso en Linux

  3. ¿Número máximo de archivos/directorios en Linux?

  4. Cómo aumentar el número máximo de hilos JVM (Linux 64bit)

  5. ¿Cantidad máxima de discos duros en Linux de 64 bits?

Cómo encontrar un nombre de proceso usando el número PID en Linux

¿Los hilos del kernel de Linux son realmente procesos del kernel?

¿Cómo saber el número de núcleos de un sistema en Linux?

¿Cómo se informa el uso de la memoria en Linux?

Graficando el uso de la memoria del proceso en Linux

Volcar la memoria de un proceso de Linux en un archivo