GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre la charge moyenne du système d'exploitation et la file d'attente d'exécution/bloquée en termes d'utilisation du processeur sous Linux

Lorsqu'il s'agit de résoudre un problème de performances sous Linux, il est très important de connaître les bases des différentes sorties de commande telles que uptime, vmstat. Dans cet article, nous essaierons de comprendre les moyennes de charge et la file d'attente d'exécution/bloquée en termes d'utilisation du processeur. Commençons par comprendre ce qu'est la charge moyenne :

La charge moyenne correspond au nombre de travaux dans la file d'attente d'exécution (état R) ou en attente d'E/S disque (état D) en moyenne sur 1, 5 et 15 minutes. Exemple de sortie de la commande uptime/top :

# uptime
11:49:14 up 25 days, 5:56, 68 users, load average: 0.03, 0.13, 0.47
# top -b -n 1
top - 11:49:34 up 25 days, 5:56, 68 users, load average: 0.09, 0.14, 0.46
Tasks: 456 total, 1 running, 445 sleeping, 10 stopped, 0 zombie
Cpu(s): 0.8%us, 0.4%sy, 0.0%ni, 98.6%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 141823788k total, 140483388k used, 1340400k free, 313452k buffers
Swap: 16772092k total, 0k used, 16772092k free, 134695384k cached

La règle d'or est la suivante :

  • Système à cœur unique - si la charge moyenne est de 1,00, cela signifie que le système est pleinement utilisé et s'il y aura plus de tâches entrantes, elles seront mises en file d'attente et attendront l'exécution.
  • Système à cœur unique - si la charge moyenne est de 2,00, cela signifie que le système est déjà utilisé et que certaines tâches sont déjà en file d'attente et en attente d'exécution.
  • Système multicœur (4 cœurs) - si la charge moyenne est de 1,00, cela signifie que le système utilise 1/4 de ses capacités CPU, une tâche est en cours d'exécution et il y a encore 3 cœurs au stade "inactif".
  • Système multicœur (4 cœurs) - si la charge moyenne est de 4,00, cela signifie que le système utilise les 4 cœurs et cela indique que le système est pleinement utilisé.

Y a-t-il encore de la marge dans les cas ci-dessus ? - normalement non - si la charge moyenne est proche du nombre de cœurs sur le système - le système d'exploitation doit être examiné pour rechercher un goulot d'étranglement réel et un réglage manquant ou peut-être que le système d'exploitation n'est pas mis à l'échelle correctement pour servir les tâches APP/DB.

Comment la valeur moyenne de la charge est-elle calculée sur Active OS ? – pour cela, nous devons trouver la file d'attente disponible via la commande vmstat :

Système inactif (système à 8 cœurs)

# vmstat 1 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1674516 316588 134364752 0 0 0 1 0 0 1 0 99 0 0
0 0 0 1674624 316588 134364752 0 0 0 0 195 307 0 0 100 0 0
0 0 0 1674624 316596 134364752 0 0 0 12 168 302 0 0 100 0 0
0 0 0 1674624 316596 134364752 0 0 0 0 198 331 0 0 100 0 0
0 0 0 1674624 316596 134364752 0 0 0 0 206 356 0 0 100 0 0
0 0 0 1674624 316600 134364736 0 0 0 12 197 333 0 0 100 0 0

Système actif (système à 8 cœurs)

# vmstat 1 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 0 1674516 316588 134364752 0 0 0 1 0 0 1 0 99 0 0
7 0 0 1674624 316588 134364752 0 0 0 0 195 307 0 0 100 0 0
2 0 0 1674624 316596 134364752 0 0 0 12 168 302 0 0 100 0 0
6 0 0 1674624 316596 134364752 0 0 0 0 198 331 0 0 100 0 0
1 0 0 1674624 316596 134364752 0 0 0 0 206 356 0 0 100 0 0
8 0 0 1674624 316600 134364736 0 0 0 12 197 333 0 0 100 0 0

Les sorties ci-dessus sont des exemples - la première montre que la file d'attente d'exécution actuelle (r) est 0 alors que la file d'attente d'exécution du système actif saute de 1 à 8 en 6 sondes.

Qu'est-ce que la file d'attente d'exécution ?

exécuter la file d'attente  :Nombre de processus actifs (en cours d'exécution) et en file d'attente.

Dans le deuxième exemple, lorsque le système est actif, nous voyons une file d'attente de 8 - c'est déjà la limite supérieure maximale que le système avec 8 cœurs devrait exécuter. Bien sûr, la file d'attente d'exécution peut afficher des valeurs comme 36 ou même 101 - elles iront parfaitement si sur le premier 36 nous avons 36 cœurs et sur le second 101 nous avons plus de 101 cœurs.

La colonne de la file d'attente d'exécution doit toujours être inférieure/identique au nombre de cœurs installés sur le système - bien sûr, la file d'attente d'exécution de 100 peut être visible sur le système avec seulement 8 cœurs - cela signifie que 8 processus sont activement servis par le processeur et que 92 autres sont mis en file d'attente et en attente d'exécution. Si la file d'attente d'exécution est supérieure aux cœurs de processeur installés, une enquête doit être effectuée en termes de vérification des performances APP/DB et de réglage manquant ou peut indiquer que le système n'est pas correctement mis à l'échelle pour servir cette file d'attente d'exécution/charge.

Tout comme la file d'attente d'exécution moyenne de charge doit rester en dessous du nombre de cœurs installés - ne pas maintenir cette valeur en dessous du seuil maximum entraînera un ralentissement/blocage ou un cas d'éviction (si le système est activé HA) car le système d'exploitation peut simplement mettre en file d'attente la surveillance du rythme cardiaque sur le disque/réseau couche car elle est occupée à servir d'autres tâches. Une charge moyenne élevée et une file d'attente d'exécution entraîneront un plantage/blocage soudain. Cela vaut la peine de surveiller activement les deux valeurs via des outils de surveillance tiers et d'alerter lorsque la file d'attente d'exécution/la charge moyenne occupent plus de 70 % des ressources CPU réelles.

La deuxième colonne importante qui est également prise par Load Average est l'état "b" dans vmstat qui explique les processus d'état bloqués - cela peut être facilement interprété comme des processus d'état D (en attente de la fin des E/S back-end - généralement une activité de stockage). Si la charge moyenne est élevée et qu'aucun processus n'est en cours d'exécution et que vmstat affiche une valeur d'état anormale "b", il est temps d'examiner les performances du SAN ou la vérification de tout composant du système d'exploitation tel que ISCSI/NFS/NIC/HBA qui pourrait rencontrer des problèmes et conduire à grave état bloqué sous Linux. Par exemple, le serveur NFS peut être occupé au niveau du processeur et tous les processus/tâches du client ( Linux ) seront mis en file d'attente dans l'état d ( b ) conduisant à une "mise en file d'attente" qui pourrait alors libérer une file d'attente massive par la suite - comme tous les processus étaient en attendant que les E/S back-end se terminent plus tard, ils pourraient à nouveau basculer en exécution, ce qui entraînerait une file d'attente d'exécution massive pouvant provoquer un état de blocage/panique ou entraîner une expulsion par la suite.

Le débit du réseau et le trafic TCP/UDP seront également impactés en raison de la charge moyenne élevée - car le système sera simplement occupé à effectuer d'autres tâches que la confirmation des connexions entrantes/sortantes et la priorité au trafic entrant d'E/S réseau via NFS/ISCSI, etc. Dans certains cas, TOP peut s'afficher jusqu'à ce que la valeur %CPU soit supérieure à 100, cela convient parfaitement car la commande TOP par défaut sous Linux affiche les opérations à un seul cœur, par conséquent, dans les configurations multicœurs, la valeur %CPU peut être supérieure à 100 %. Par exemple, si le PID utilise pleinement 4 cœurs, la valeur %CPU affichera 400

# top
top - 11:49:34 up 25 days, 5:56, 68 users, load average: 0.09, 0.14, 0.46
Tasks: 456 total, 1 running, 445 sleeping, 10 stopped, 0 zombie
Cpu(s): 0.8%us, 0.4%sy, 0.0%ni, 98.6%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 141823788k total, 140483388k used, 1340400k free, 313452k buffers
Swap: 16772092k total, 0k used, 16772092k free, 134695384k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1438 java 20 0 945m 4220 2528 S 400.5 0.0 56:31.95 java <---

Infos sur %CPU :

##
%CPU -- CPU Usage
The task's share of the elapsed CPU time since the last screen
update, expressed as a percentage of total CPU time.

In a true SMP environment, if a process is multi-threaded and top
is not operating in Threads mode, amounts greater than 100% may
be reported. You toggle Threads mode with the 'H' interactive
command.
##

Pour répertorier rapidement les processus en cours d'exécution/bloqués, utilisez la commande ps ci-dessous :

# ps r -Af

Pour répertorier les threads de processus afin de vérifier si certains threads générés par le PID parent ne causent pas de problème de pic de processeur, exécutez :

# ps -e -To pid,ppid,state,pcpu,command

ou

# ps -elfL

Également pour vérifier si les processeurs du système d'exploitation servent activement l'espace utilisateur (US), utilisez les exemples de commande ci-dessous :

# sar -P ALL 1
Linux 3.8.13-118.13.3.el6uek.x86_64 (lgeeklab) 01/08/2017 _x86_64_ (8 CPU)

02:40:38 PM CPU %user %nice %system %iowait %steal %idle
02:40:39 PM all 12.62 0.00 0.12 6.88 0.00 80.38
02:40:39 PM 0 0.00 0.00 0.00 54.55 0.00 45.45
02:40:39 PM 1 0.00 0.00 0.00 0.00 0.00 100.00
02:40:39 PM 2 0.99 0.00 0.00 0.00 0.00 99.01
02:40:39 PM 3 0.00 0.00 0.00 0.00 0.00 100.00
02:40:39 PM 4 100.00 0.00 0.00 0.00 0.00 0.00
02:40:39 PM 5 0.98 0.00 0.98 0.00 0.00 98.04
02:40:39 PM 6 0.00 0.00 0.00 0.00 0.00 100.00
02:40:39 PM 7 0.00 0.00 0.00 0.00 0.00 100.00

Average: CPU %user %nice %system %iowait %steal %idle
Average: all 12.63 0.00 0.13 6.00 0.00 81.24
Average: 0 0.00 0.00 0.00 45.23 0.00 54.77
Average: 1 0.50 0.00 0.00 3.00 0.00 96.50
Average: 2 0.50 0.00 0.00 0.00 0.00 99.50
Average: 3 0.00 0.00 0.00 0.50 0.00 99.50
Average: 4 100.00 0.00 0.00 0.00 0.00 0.00
Average: 5 0.50 0.00 0.50 0.00 0.00 99.00
Average: 6 0.00 0.00 0.00 0.00 0.00 100.00
Average: 7 0.00 0.00 0.00 0.00 0.00 100.00
# mpstat -P ALL
Linux 3.8.13-118.13.3.el6uek.x86_64 (geeklab) 01/08/2017 _x86_64_ (8 CPU)

02:41:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
02:41:26 PM all 0.79 0.00 0.10 1.18 0.00 0.02 0.00 0.00 97.92
02:41:26 PM 0 0.94 0.00 0.14 2.84 0.00 0.02 0.00 0.00 96.06
02:41:26 PM 1 0.94 0.00 0.14 2.70 0.00 0.02 0.00 0.00 96.20
02:41:26 PM 2 0.93 0.00 0.14 1.13 0.00 0.03 0.00 0.00 97.77
02:41:26 PM 3 0.94 0.00 0.13 2.71 0.00 0.02 0.00 0.00 96.20
02:41:26 PM 4 0.65 0.00 0.06 0.01 0.00 0.01 0.00 0.00 99.28
02:41:26 PM 5 0.65 0.00 0.06 0.01 0.00 0.01 0.00 0.00 99.27
02:41:26 PM 6 0.65 0.00 0.06 0.01 0.00 0.01 0.00 0.00 99.27
02:41:26 PM 7 0.64 0.00 0.05 0.01 0.00 0.01 0.00 0.00 99.29

De plus, les commutateurs de commande TOP ci-dessous peuvent être utilisés pour obtenir des informations sur le thread PID et également quel cœur a servi le PID la dernière fois :

Pour afficher les discussions dans le TOP :

# top -H

Pour montrer quel cœur a servi le PID la dernière fois, exécutez :

# top

Appuyez ensuite sur 'F ' et appuyez sur 'J ' et appuyez sur Entrée pour obtenir la sortie ci-dessous où 'P ' la ligne sera la dernière CPU utilisée.

Tasks: 1045 total, 2 running, 1043 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 93.6%id, 5.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16159656k total, 15349888k used, 809768k free, 597960k buffers
Swap: 8232956k total, 218784k used, 8014172k free, 9840192k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ P COMMAND
10428 root 20 0 15228 2228 1724 S 0.7 0.0 0:26.86 2 top
10838 oracle 20 0 4921m 585m 5708 S 0.7 3.7 137:11.13 3 mysqld
15360 root 20 0 15888 2792 1724 R 0.7 0.0 0:00.55 6 top
528 root 20 0 0 0 0 S 0.3 0.0 76:39.23 0 jbd2/dm-0-8
9003 root 20 0 0 0 0 S 0.3 0.0 8:49.33 2 jbd2/dm-3-8
10815 oracle 20 0 4921m 585m 5708 S 0.3 3.7 13:35.18 1 mysqld
14902 oracle 20 0 9431m 2.4g 28m S 0.3 15.5 19:54.77 3 java
15021 oracle 20 0 9431m 2.4g 28m S 0.3 15.5 20:09.19 1 java
15094 oracle 20 0 9431m 2.4g 28m S 0.3 15.5 6:54.88 3 java
32045 enduser 20 0 15228 2220 1724 S 0.3 0.0 9:32.73 5 top
32278 root 20 0 15228 2212 1724 S 0.3 0.0 9:32.96 1 top

FAQ

Le système doit-il fonctionner avec une limite supérieure comme 8 processus en cours d'exécution avec une charge moyenne à la même valeur sur un système à 8 cœurs ?

Réponse - Non

Le système doit être mis à l'échelle correctement et ne pas dépasser 70 % de ses possibilités - il y a donc une certaine marge pour toute nouvelle tâche à exécuter - ceci est particulièrement important pour les serveurs compatibles HA et pour les systèmes où il y a des serveurs haut de gamme. Composants IO/Network qui pourraient être accidentellement mis en file d'attente par le système d'exploitation actif. Pour cette vérification approfondie, l'équipe APP/DB doit vérifier ce qui s'exécute exactement sous le système d'exploitation.

Est-ce que seules les tâches APP/DB provoquent une file d'attente d'exécution élevée/moyenne de charge

Réponse - Non

Certaines tâches du système d'exploitation peuvent entraîner une file d'attente d'exécution élevée ou une moyenne de charge - mais ce sont des cas vraiment rares. Dans ce cas, la commande top sera utile pour surveiller les valeurs US /SY / NI / ID / WA / HI / SI / ST et se concentrer sur la section SY ( System ) qui indique le temps passé par le processeur au niveau du noyau. Assurez-vous que son utilisation est toujours inférieure à l'utilisation réelle des États-Unis (utilisateur) et que SY n'utilise pas, par exemple, 20 à 30 % du processeur (dépend de la configuration du processeur et du cas réel).

Par exemple, un %SY élevé peut être visible lors d'opérations E/S/réseau élevées ou lors de cas de manque de mémoire - exemple de processus :kjorunald. Un %SY élevé peut également être visible lors de charges système importantes - par exemple, une file d'attente d'exécution élevée ou une file d'attente bloquée causée par des tâches APP/DB - la plupart du temps, on observe que %SY sera d'environ 20 à 30 %, où %US sera être beaucoup plus élevé.

Un %SY plus élevé ne signifie pas toujours qu'il y a un problème de noyau ou de système d'exploitation - par exemple, il peut y avoir un code d'application/base de données qui provoque de nombreux appels système autour d'une fonction spécifique du noyau - pour déboguer cette autre strace ou perf doit être utilisée pour vérifier l'interaction PID spécifique.

Cela signifie-t-il qu'un seul cœur ne peut servir qu'une seule tâche de processus à la fois ?

Réponse - Oui/Non

Les processeurs sont conçus pour le multitâche - même avec un système à un seul cœur, les utilisateurs peuvent toujours exécuter plusieurs tâches et démarrer plusieurs applications - dans une configuration à un seul cœur, le "découpage du temps" est utilisé, ce qui permet aux tâches d'être exécutées pendant un certain temps tandis que d'autres tâches attendront pour être exécuté (cela peut se produire plusieurs fois par seconde).

Les systèmes modernes utiliseront des fonctionnalités multicœurs/multithreading pour rendre cet impact de commutation moins visible. moins de charge moyenne sur le système et une file d'attente de tâches réduite - Par exemple, un système à double cœur peut diviser les applications/threads/tâches en deux cœurs distincts permettant au cœur de ne basculer que la moitié des tâches par rapport au système à cœur unique, ce qui a beaucoup moins d'impact sur les performances du système.


Linux
  1. Comprendre les appels système sous Linux avec strace

  2. Comment vérifier la version du système d'exploitation et de Linux

  3. Linux - Comprendre les autorisations Unix et les types de fichiers ?

  4. Linux - Comment la charge moyenne fonctionne-t-elle avec les processeurs modernes ?

  5. Utilisation élevée du processeur mais faible charge moyenne

5 façons de vérifier les informations sur le processeur sous Linux

Qu'est-ce que la moyenne de charge sous Linux ?

Comment vérifier l'utilisation ou l'utilisation du processeur Linux

Comment écrire et exécuter un programme C sous Linux

Présentation de la surveillance et du réglage des performances Linux

Comment exécuter les packages .run et .bin dans le système Linux