web-dev-qa-db-fra.com

Comprendre la différence entre pid_max, ulimit -u et thread_max

J'essaie de comprendre les processus Linux. J'ai une confusion sur les termes pid_max, ulimit -u et thread_max. Quelle est exactement la différence entre ces termes? Quelqu'un peut-il me clarifier les différences?

11
Ramesh

Comprendons la différence entre un processus et un fil. Selon - this lien,

La différence typique est que les threads (du même processus) sont exécutés dans un espace mémoire partagé, tandis que les processus fonctionnent dans des espaces de mémoire séparés.

Maintenant, nous avons le pid_max Paramètre qui peut être déterminé comme ci-dessous.

cat /proc/sys/kernel/pid_max

Donc, la commande ci-dessus renvoie 2 768 ce qui signifie que je peux exécuter 2 768 processus simultanément dans mon système pouvant exécuter dans des espaces de mémoire distincts.

Maintenant, nous avons le threads-max Paramètre qui peut être déterminé comme ci-dessous.

cat /proc/sys/kernel/threads-max

La commande ci-dessus me renvoie la sortie comme 126406 ce que signifie que je peux avoir 126406 threads dans un espace mémoire partagé.

Maintenant, prenons le 3ème paramètre ulimit -u qui dit que les processus totaux qu'un utilisateur peut avoir à un moment donné. La commande ci-dessus me renvoie la sortie comme 632. Cela signifie pour tous les processus qu'un utilisateur a créé à un moment quelconque l'utilisateur peut avoir 632 processus fonctionnant.

cas hypothétique

Ainsi, en supposant qu'il y a 2 processus étant exécutés simultanément par 2 utilisateurs et chaque processus prend une mémoire fortement, les deux processus utiliseront efficacement la limite d'utilisateur 632 sur les processus. Donc, si tel est le cas, les 2 utilisateurs auront effectivement utilisé le tout 126406threads-max Taille.

Maintenant, je dois déterminer le nombre de processus qu'un utilisateur peut fonctionner à tout moment. Ceci peut être déterminé à partir du fichier, /etc/security/limits.conf. Donc, il existe fondamentalement 2 réglages dans ce fichier comme expliqué sur ici .

A Limite souple est comme A AVERTISSEMENT et limite dure est une limite maximale réelle. Par exemple, après éviter toute personne dans le groupe étudiant d'avoir plus de 50 processus, et un avertissement sera donné à 30 processus.

@student        hard    nproc           50
@student        soft    nproc           30

Les limites dures sont maintenues par le noyau pendant que les limites douces sont appliquées par la coquille.

15
Ramesh

Désolé, la réponse acceptée est une mauvaise information sur plusieurs fronts.

/ proc/sys/kernel/pid_max n'a rien à voir avec le nombre maximum de processus pouvant être exécutés à un moment donné. En fait, l'identifiant de processus numérique maximum que ne peut être attribué par le noyau.

Dans le noyau Linux, un processus et un fil sont un un des mêmes. Ils sont gérés de la même manière par le noyau. Ils occupent tous les deux une fente dans la structure de données Task_Structrice. Un fil, par une terminologie commune, est sous Linux un processus qui partage des ressources avec un autre processus (ils partageront également un ID de groupe de threads). Un fil dans le noyau Linux est en grande partie une construction conceptuelle en ce qui concerne le planificateur.

Maintenant que vous comprenez que le noyau ne différencie largement pas entre un fil et un processus, il devrait avoir plus de sens que/proc/sys/noyau/threads-max est en réalité le nombre maximal d'éléments contenus dans la structure de données Task_Structure. Quelle est la structure de données qui contient la liste des processus, ou ils peuvent être appelés, les tâches.

ulimit est, comme son nom l'indique, une limite d'utilisateur. Le drapeau -u est défini comme " le nombre maximum de processus disponibles à un seul utilisateur ". Un élément de Task_Structure contient l'UID de l'utilisateur qui a créé la tâche. Un nombre per-uid est maintenu et incrémenté/décrémenté à chaque fois qu'une tâche est ajoutée/retirée de Task_struct. Ainsi, Ulimit -u indique le nombre maximum d'éléments (processus) qu'un utilisateur particulier est autorisé à avoir dans la tâche à tout moment.

J'espère que cela éclaircit les choses.

12
David LaPorte