Maison >Tutoriel système >Linux >Découvrir les raisons pour lesquelles les disques lents provoquent une charge Linux croissante

Découvrir les raisons pour lesquelles les disques lents provoquent une charge Linux croissante

WBOY
WBOYavant
2023-12-29 14:49:59622parcourir

1. La différence entre l'utilisation du processeur et le taux de chargement

Découvrir les raisons pour lesquelles les disques lents provoquent une charge Linux croissante

Ici, nous devons faire la distinction entre la charge du processeur et l'utilisation du processeur. Ce sont deux concepts différents, mais leurs informations peuvent être affichées dans la même commande supérieure. L'utilisation du processeur montre le pourcentage de processeur occupé par le programme en temps réel pendant l'exécution. Il s'agit d'une statistique d'utilisation du processeur sur une période donnée. Grâce à cet indicateur, vous pouvez voir combien le processeur est occupé sur une certaine période de temps. S'il est occupé Si le temps est très long, vous devez alors vous demander si le processeur est déjà surchargé. La charge du processeur affiche les informations statistiques de la somme du nombre de processus que le processeur traite et attend que le processeur soit traité sur une période de temps, qui sont également les informations statistiques sur la longueur de la file d'attente d'utilisation du processeur.

Une utilisation élevée du processeur ne signifie pas que la charge doit être importante. Peut-être que la tâche est gourmande en ressources processeur. Une charge moyenne élevée se produira-t-elle dans la même situation de faible utilisation du processeur ? En comprenant le temps d'occupation et le temps d'utilisation, vous pouvez savoir que lorsque le processeur alloue une tranche de temps, son utilisation dépend entièrement de l'utilisateur, il est donc tout à fait possible d'avoir une faible utilisation et une charge moyenne élevée. De plus, les périphériques IO peuvent également entraîner une charge élevée du processeur.

De ce point de vue, il ne suffit pas de juger si le processeur est dans un état de fonctionnement surchargé en se basant uniquement sur l'utilisation du processeur. Il doit être combiné avec la charge moyenne pour examiner l'utilisation du processeur dans son ensemble. Il existe un exemple sur Internet pour illustrer la différence entre les deux : dans une cabine téléphonique publique, il y a une personne qui appelle et quatre personnes qui attendent. Chaque personne est limitée à utiliser le téléphone pendant une minute si quelqu'un ne termine pas. appelez dans la minute, ils ne peuvent que raccrocher et faire la queue en attendant le prochain tour. Le téléphone ici est équivalent au processeur, et les personnes qui appellent ou attendent d'appeler sont équivalentes au nombre de tâches. Lors de l'utilisation de la cabine téléphonique, certaines personnes partiront définitivement après avoir passé des appels, certaines personnes feront à nouveau la queue sans terminer leurs appels, et il y aura même de nouvelles personnes faisant la queue ici. augmentation ou diminution du nombre de tâches. Afin de compter la charge moyenne, nous comptons le nombre de personnes toutes les cinq secondes et faisons la moyenne des statistiques aux 1ère, 5ème et 15ème minutes pour former la charge moyenne aux 1ère, 5ème et 15ème minutes. Certaines personnes décrochent le téléphone et appellent immédiatement, et l'appel dure une minute, tandis que d'autres peuvent chercher le numéro de téléphone dans les trente premières secondes, ou hésiter à appeler, puis appeler dans les trente dernières secondes. Si le téléphone est considéré comme un processeur et que le nombre de personnes est considéré comme une tâche, nous disons que l'utilisation du processeur de la première personne (tâche) est élevée et que l'utilisation du processeur de la dernière personne (tâche) est faible. Bien entendu, le processeur ne fonctionnera pas pendant les trente premières secondes et se reposera au cours des trente secondes suivantes. Le processeur continuera à fonctionner. C'est juste que certains programmes impliquent beaucoup de calculs, donc l'utilisation du processeur est élevée, tandis que certains programmes impliquent très peu de calculs, donc l'utilisation du processeur est naturellement faible. Mais que l'utilisation du processeur soit élevée ou faible, cela n'a rien à voir avec le nombre de tâches mises en file d'attente ultérieurement.

Le nombre de processeurs et le nombre de cœurs de processeur (c'est-à-dire le nombre de cœurs) affecteront la charge du processeur, car les tâches sont finalement attribuées aux cœurs de processeur pour le traitement. Deux processeurs valent mieux qu’un processeur, et les doubles cœurs valent mieux que les simples cœurs. Par conséquent, nous devons nous rappeler qu'outre la différence de performances du processeur, la charge du processeur est calculée en fonction du nombre de cœurs, c'est-à-dire "le nombre de cœurs, c'est-à-dire la charge qu'il y a". il est préférable de ne pas dépasser 100 % pour un seul cœur, c'est-à-dire que la charge est de 1,00, et ainsi de suite.

Il existe un répertoire /proc sous Linux, qui stocke le mappage virtuel du système en cours d'exécution. Il existe un fichier appelé cpuinfo, qui stocke les informations sur le processeur. Le fichier /proc/cpuinfo affiche les informations par sections par CPU logique plutôt que par CPU réel. Les informations de chaque CPU logique occupent une section et le premier identifiant de CPU logique commence à 0.

$ cat /proc/cpuinfo 
processor : 0
vendor_id : GenuineIntel
cpu family: 6
model : 63
model name: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz
stepping: 2
microcode : 0x36
cpu MHz : 2399.998
cache size: 20480 KB
physical id : 0
siblings: 2
core id : 0
cpu cores : 2
apicid: 0
initial apicid: 0
fpu : yes
fpu_exception : yes
cpuid level : 15
wp: yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr ......
bogomips: 4799.99
clflush size: 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:

Pour comprendre les informations CPU dans ce fichier, il y a plusieurs concepts connexes à connaître, tels que : le processeur représente l'identification du CPU logique, le nom du modèle représente les informations de modèle du CPU réel, l'identifiant physique représente le CPU réel et l'identification , et les cœurs du processeur représentent le nombre réel de cœurs du processeur, etc.

Description du CPU logique : Les serveurs d'aujourd'hui utilisent généralement la technologie « Hyper-Threading » (HT) pour améliorer les performances du CPU. La technologie Hyper-threading permet à un CPU d'exécuter plusieurs programmes en même temps et de partager les ressources d'un CPU. En théorie, il devrait exécuter deux threads en même temps comme deux CPU. Bien que la technologie hyper-threading puisse exécuter deux threads en même temps, ce n'est pas comme deux vrais processeurs, chaque processeur dispose de ressources indépendantes. Lorsque deux threads ont besoin d'une ressource en même temps, l'un d'eux doit être temporairement arrêté et abandonner la ressource jusqu'à ce que ces ressources soient inactives avant de continuer. Par conséquent, les performances de l’hyper-threading ne sont pas égales aux performances de deux processeurs. Les processeurs dotés de la technologie Hyper-Threading ont d'autres limitations.

2. Méthode de calcul du taux de charge du processeur

Le concept de charge moyenne est originaire du système UNIX. Bien que les formules de chaque entreprise soient différentes, elles sont toutes utilisées pour mesurer le nombre de processus utilisant le CPU et le nombre de processus en attente du CPU. le nombre de processus exécutables. Par conséquent, la charge moyenne peut être utilisée comme indicateur de référence pour les goulots d'étranglement du processeur. Si elle est supérieure au nombre de processeurs, cela signifie que le processeur peut ne pas être suffisant.

Cependant, c’est un peu différent sous Linux !

En plus du nombre de processus utilisant le CPU et du nombre de processus en attente du CPU, la charge moyenne sous Linux inclut également le nombre de processus en veille ininterrompue. Habituellement, en attendant les périphériques IO et le réseau, le processus sera en état de veille ininterrompue. La logique des concepteurs Linux est que le sommeil ininterrompu devrait être de très courte durée et reprendra bientôt son fonctionnement, il est donc assimilé à exécutable. Cependant, le sommeil ininterrompu reste un sommeil même s'il est court, sans compter que le sommeil ininterrompu peut ne pas être très court dans le monde réel. Un sommeil ininterrompu important ou long signifie généralement que le périphérique IO a rencontré un goulot d'étranglement. Comme nous le savons tous, les processus en état de veille ne nécessitent pas de processeur. Même si tous les processeurs sont inactifs, le processus en veille ne peut pas s'exécuter. Par conséquent, le nombre de processus en veille n'est certainement pas approprié pour être utilisé comme indicateur pour mesurer la charge du processeur sous Linux. compte les processus de sommeil ininterrompus comme La pratique consistant à saisir la moyenne de charge renverse directement le sens original de la moyenne de charge. Par conséquent, sur les systèmes Linux, l’indicateur de charge moyenne est fondamentalement inutile car vous ne savez pas ce que cela signifie. Lorsque vous voyez une moyenne de charge élevée, vous ne savez pas s’il y a trop de processus exécutables ou trop de processus de veille ininterrompue. Il est impossible de déterminer si la CPU est insuffisante ou si le périphérique IO présente un goulot d'étranglement.

D'un autre côté, cela peut également expliquer pourquoi la charge du processeur monte en flèche lorsque le disque est lent (lorsqu'une grande quantité de disque est utilisée). Fondamentalement, lorsque je rencontre une charge CPU élevée, il y a deux situations : le CPU lui-même gère trop de tâches, et les interruptions logicielles et les changements de contexte sont trop fréquents, ce qui entraîne une charge élevée et le disque est trop lent, provoquant trop de veille ininterrompue ; ce qui provoque une charge élevée du processeur.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer