Maison > Tutoriel système > Linux > Maîtriser l'importance et les compétences pratiques des processus et threads Linux

Maîtriser l'importance et les compétences pratiques des processus et threads Linux

WBOY
Libérer: 2024-02-15 08:27:12
avant
775 Les gens l'ont consulté

En tant qu'administrateur système Linux, il est très important de comprendre et de maîtriser les concepts de processus et de threads ainsi que les compétences pratiques correspondantes. Cela nous aide non seulement à mieux gérer les ressources du système, mais améliore également l'efficacité opérationnelle et la stabilité du système. Cet article vous donnera une compréhension approfondie des processus et des threads Linux et partagera quelques conseils et outils pratiques.

Un processus est une activité en cours d'exécution d'un programme avec certaines fonctions indépendantes sur une certaine collection de données. C'est l'unité de base de l'exécution dynamique du système d'exploitation. Dans les systèmes d'exploitation traditionnels, le processus est à la fois l'unité d'allocation de base et l'unité d'exécution de base.

Processus

Un processus est une activité en cours d'exécution d'un programme avec certaines fonctions indépendantes sur une certaine collection de données. C'est l'unité de base de l'exécution dynamique du système d'exploitation. Dans les systèmes d'exploitation traditionnels, le processus est à la fois l'unité d'allocation de base et l'unité d'exécution de base. Il y a deux points principaux dans le concept de processus : Premièrement, un processus est une entité. Chaque processus possède son propre espace d'adressage, qui comprend généralement une région de texte, une région de données et une région de pile. La zone de texte stocke le code exécuté par le processeur ; la zone de données stocke les variables et la mémoire allouée dynamiquement utilisée pendant l'exécution du processus et la zone de pile stocke les instructions et les variables locales pour les appels de procédure actifs. Deuxièmement, un processus est un « programme en cours d’exécution ». Un programme est une entité inanimée. Ce n'est que lorsque le processeur donne vie au programme (le système d'exploitation l'exécute) qu'il peut devenir une entité active.

Thread

Thread est la plus petite unité sur laquelle le système d'exploitation peut effectuer la planification des opérations. Il est inclus dans le processus et constitue la véritable unité opérationnelle du processus. Un thread fait référence à un seul flux de contrôle séquentiel dans un processus. Plusieurs threads peuvent s'exécuter simultanément dans un processus et chaque thread exécute différentes tâches en parallèle. On l'appelle également processus légers sous Unix System V et SunOS, mais les processus légers font davantage référence aux threads du noyau, tandis que les threads utilisateur sont appelés threads. La relation entre les processus et les threads Plusieurs threads dans le même processus partageront toutes les ressources système du processus, telles que l'espace d'adressage virtuel, les descripteurs de fichiers, le traitement du signal, etc. Mais plusieurs threads dans le même processus ont leurs propres piles d'appels, leur propre contexte de registre et leur propre stockage local de thread.

Threads et processus sous Linux

Dans le noyau Linux, bien que les processus et les threads soient tous deux des tâches, ils doivent être distingués. Où pid est l'identifiant du processus et tgid est l'ID du groupe de threads. Pour tout processus, s'il n'y a que le thread principal, alors le pid est lui-même, le tgid est lui-même et le group_leader pointe toujours vers lui-même. Cependant, si un processus crée d’autres threads, cela change. Le thread a son propre pid, tgid est le pid du thread principal du processus et group_leader pointe vers le thread principal du processus. Ainsi avec tgid, on sait si Taste_struct représente un processus ou un thread. La relation est la suivante :

掌握 Linux 进程和线程的重要性与实用技巧

À propos des paramètres du noyau des threads et des processus

ulimit limit, exécutez ulimit -a sous Linux, vous verrez les limites ulimit sur diverses ressources.

掌握 Linux 进程和线程的重要性与实用技巧

Le "max user process" est le nombre maximum de threads qu'un processus peut créer. On peut modifier ce paramètre :

.
ulimit -u 66535
Copier après la connexion

2. Paramètre limite sys.kernel.threads-max. Ce paramètre limite le nombre de threads globalement dans le système d'exploitation. Vous pouvez afficher sa valeur via la commande suivante. Afficher la méthode threads-max :

cat /proc/sys/kernel/threads-max
32768
Copier après la connexion

Comment modifier cette valeur :

#方法一,重启后会失效
echo 65535 > /proc/sys/kernel/threads-max
#方法二,永久修改
echo "kernel.threads-max = 65535" >> /etc/sysctl.conf
Copier après la connexion

3. Paramètre limite sys.kernel.pid_max. Ce paramètre limite le nombre de threads globalement dans le système d'exploitation. Vous pouvez afficher sa valeur via la commande suivante. Permettez-moi de parler du système d'exploitation 32 bits. La valeur maximale est de 32 768 et ne peut pas être modifiée. La valeur maximale de pid_max sur le système 64 bits est de 2 ^ 22. Lorsque le noyau Linux initialise le système, il définira la valeur pid_max en fonction du nombre de processeurs de la machine. Par exemple, si le nombre de processeurs dans la machine est inférieur ou égal à 32, alors pid_max sera défini sur 32768 (32 Ko) ; si le nombre de processeurs dans la machine est supérieur à 32, alors pid_max sera défini sur N ; *1024 (N est le nombre de processeurs). Comment vérifier pid_max :

cat /proc/sys/kernel/pid_max
32768
Copier après la connexion

Comment modifier cette valeur :

#方法一,重启后会失效
echo 65535 > /proc/sys/kernel/pid_max
#方法二,永久修改
echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
Copier après la connexion

Remarque : un certain nombre de threads occuperont également un pid, donc threads-max doit être inférieur ou égal à pid_max.

Limitation du nombre de threads de conteneur

Pour les systèmes Linux, un conteneur est un ensemble de processus. Si l'application dans le conteneur crée trop de processus ou présente des bogues, elle produira un comportement similaire aux fork bombs. De cette façon, non seulement les autres conteneurs sur le même nœud ne pourront pas fonctionner, mais l’hôte lui-même ne pourra pas non plus fonctionner. Ainsi, pour chaque conteneur, nous devons limiter son nombre maximum de processus, et cette fonction est complétée par le sous-système pids Cgroup. J'ai déjà rencontré un tel problème. Étant donné que les applications Java doivent gérer de nombreuses tâches planifiées, une tâche planifiée ouvre un fil de discussion. Cependant, en raison de bogues dans le code, les threads n'ont pas été recyclés à temps, puis le conteneur a continué à générer des threads, ce qui a épuisé l'espace table du processus de l'hôte, ce qui a finalement amené l'ensemble du service Linux à signaler l'erreur "java.lang.OutOfMemoryError". : Impossible de créer des threads natifs", affectant d'autres services. Un message d'erreur « Ressource temporairement indisponible » apparaît pendant le processus de création. En plus de permettre aux développeurs de corriger des bugs, ce genre de problème nécessite également de limiter le nombre de threads au niveau du système.

cgroup

Les Pids sont isolés dans le groupe de contrôle. En modifiant la configuration docker/kubelet, vous pouvez limiter le nombre total de pids pour limiter le nombre total de threads.

Docker, définissez le paramètre –pids-limit au démarrage du conteneur pour limiter le nombre total de pids au niveau du conteneur

kubelet, activez la fonctionnalité SupportPodPidsLimit, définissez le paramètre –pod-max-pids et limitez le nombre total de pids pour chaque pod du nœud

Le principe est le suivant : après la création d'un conteneur, le service qui crée le conteneur créera un sous-répertoire sous /sys/fs/cgroup/pids, qui est un groupe de contrôle. Le fichier le plus critique du groupe de contrôle est pids. maximum. Kubelet ou docker écrit une valeur dans ce fichier, et cette valeur correspond au nombre maximum de processus autorisés dans ce conteneur. Chaque nœud de Kubernetes exécute un service appelé Kubelet, qui est responsable de l'état et du cycle de vie des conteneurs sur le nœud, comme la création et la suppression de conteneurs. Selon le document officiel de Kubernetes Process ID Limits And Reservations, vous pouvez définir l'option de configuration –pod-max-pids du service Kubelet. Les conteneurs suivants créés sur ce nœud finiront par utiliser le contrôleur pid Cgroups pour limiter le nombre de processus dans le. récipient.

Résumé

Grâce à l'introduction et à l'analyse de cet article, nous comprenons les concepts, les différences, les transitions d'état et leur impact sur les ressources système des processus et threads Linux. Dans le même temps, nous avons également partagé quelques conseils et outils pratiques, tels que le réglage des processus, les outils de détection et les outils de gestion. Ces outils et techniques peuvent non seulement nous aider à mieux gérer les ressources du système et à améliorer l'efficacité opérationnelle et la stabilité du système, mais également à améliorer notre efficacité de travail et notre compétitivité. Par conséquent, il est essentiel que nous maîtrisions l’importance et les compétences pratiques des processus et des threads Linux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:lxlinux.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal