Comprender las diferencias entre pid_max, ulimit -u y thread_max

Comprender las diferencias entre pid_max, ulimit -u y thread_max

Estoy tratando de comprender los procesos de Linux. Estoy confundido sobre los términos respectivos pid_maxy ulimit -u.thread_max

¿Cuál es exactamente la diferencia entre estos términos? ¿Alguien puede aclarar las diferencias?

Respuesta1

Lo sentimos, la respuesta aceptada es mala información en varios frentes.

/proc/sys/kernel/pid_maxNo tiene nada que ver con el número máximo de procesos que se pueden ejecutar en un momento dado. Es, de hecho, el IDENTIFICADOR DE PROCESO numérico máximo que puede asignar el núcleo.

En el kernel de Linux, un proceso y un hilo son lo mismo. El kernel los maneja de la misma manera. Ambos ocupan un espacio en la estructura de datos task_struct. Un subproceso, según terminología común, es en Linux un proceso que comparte recursos con otro proceso (también compartirán un ID de grupo de subprocesos). Un hilo en el kernel de Linux es en gran medida una construcción conceptual en lo que respecta al programador.

Ahora que comprende que el núcleo no diferencia en gran medida entre un subproceso y un proceso, debería tener más sentido que /proc/sys/kernel/threads-maxen realidad sea el número máximo de elementos contenidos en la estructura de datos task_struct. Que es la estructura de datos que contiene la lista de procesos, o como se les puede llamar, tareas.

ulimit es, como su nombre lo indica, un límite por usuario. La -ubandera se define como "El número máximo de procesos disponibles para un solo usuario". Un elemento de task_struct contiene el uid del usuario que creó la tarea. Se mantiene un recuento por uid y se incrementa/disminuye cada vez que se agrega/elimina una tarea de task_struct. Entonces, ulimit -uindica la cantidad máxima de elementos (procesos) que un usuario en particular puede tener dentro de task_struct en un momento dado.

Espero que eso aclare las cosas.

Respuesta2

Entendamos la diferencia entre un proceso y un hilo. segúnesteenlace,

La diferencia típica es que los subprocesos (del mismo proceso) se ejecutan en un espacio de memoria compartido, mientras que los procesos se ejecutan en espacios de memoria separados.

Ahora tenemos el pid_maxparámetro que se puede determinar como se muestra a continuación.

cat /proc/sys/kernel/pid_max

Entonces el comando anterior regresa32.768lo que significa que puedo ejecutar32.768procesos simultáneamente en mi sistema que pueden ejecutarse en espacios de memoria separados.

Ahora tenemos el threads-maxparámetro que se puede determinar como se muestra a continuación.

cat /proc/sys/kernel/threads-max

El comando anterior me devuelve el resultado como126406lo que significa que puedo tener126406hilos en un espacio de memoria compartida.

Ahora, tomemos el tercer parámetro ulimit -uque dice el total de procesos que un usuario puede tener en un momento determinado. El comando anterior me devuelve el resultado como63203. Esto significa que para todos los procesos que un usuario ha creado en un momento dado, el usuario puede tener63203procesos en ejecución.

Caso hipotético

Entonces, suponiendo que hay 2 procesos ejecutados simultáneamente por 2 usuarios y cada proceso consume mucha memoria, ambos procesos utilizarán efectivamente el63203Límite de usuarios en los procesos. Entonces, si ese es el caso, los 2 usuarios habrán agotado efectivamente todo el126406 threads-maxtamaño.

Ahora, necesito determinar cuántos procesos puede ejecutar un usuario en cualquier momento. Esto se puede determinar a partir del archivo /etc/security/limits.conf. Entonces, hay básicamente 2 configuraciones en este archivo como se explica más arribaaquí.

Alímite suavees como unadvertenciaylímite estrictoes unlímite máximo real. Por ejemplo, seguir evitará que cualquier miembro del grupo de estudiantes tenga más de 50 procesos y se dará una advertencia en 30 procesos.

@student        hard    nproc           50
@student        soft    nproc           30

El núcleo mantiene los límites estrictos, mientras que el shell aplica los límites suaves.

información relacionada