[LINUX] Concept de charge serveur que les nouveaux ingénieurs veulent connaître

Il y a environ 10 ans, je vais relancer le blog lorsque j'étais un jeune ingénieur. Récemment, les chances de se connecter au serveur avec ssh et de le vérifier ont diminué, mais cela vaut la peine de s'en souvenir. https://itinao.hatenadiary.org/

Événement d'un jour

Je suis un ingénieur. Dès que je vais travailler, des vendeurs et des planificateurs brillants le disent.

Ventes "D'une manière ou d'une autre, le serveur est lourd" Projet "D'une manière ou d'une autre! Ce ne sera pas un travail"

Je "Ouais, je ne sais pas comment enquêter." Je "Je suis désolé. Je contacterai mon senior bientôt."

En tant que programmeur, je n'ai pas les connaissances et les connaissances du côté de l'infrastructure. Je veux faire quelque chose, mais je ne peux rien y faire. ..

C'est une vue courante lorsque vous exploitez votre propre service.

Après tout, je veux faire quelque chose!

Le ministre de l'Information est important, mais après tout, il est ingénieur. Je veux pouvoir le faire moi-même. À une telle personne. Tout d'abord, apprenons le concept de goulots d'étranglement.

Il existe deux manières principales de penser les goulots d'étranglement

1.Charge CPU
2. I/O charge

1. Quelle est la charge du processeur?

L'état dans lequel le processus occupe la CPU (calculé par la CPU) スクリーンショット 2020-03-18 0.58.50.png

Si un processus (programme) utilise le processeur et que le taux d'utilisation est de 100% pendant une longue période, il interférera avec l'exécution d'autres processus.

Ce serait un problème s'il y a un mot erroné, mais une utilisation à 100% du processeur en soi n'est pas mauvaise, et c'est idéal s'il n'y a pas de goulots d'étranglement autres que la capacité du disque et de la mémoire.

Si le CPU 100% continue soudainement

Vérifiez si le programme est hors de contrôle (boucle infinie, etc.).
Vérifiez le traitement dans la dernière version.

2. Quelle est alors la différence entre la charge du processeur et la charge des E / S?

E / S signifie entrée / sortie. Les entrées et sorties fréquentes de données pèsent sur le matériel et le réseau, de sorte que la charge du processeur et celle des E / S sont différentes. Une charge CPU élevée ne ralentit pas nécessairement les E / S, mais une grande quantité de lecture et d'écriture sur le disque.

Si la charge d'E / S continue

Existe-t-il de nombreux programmes qui entrent et produisent des fichiers?
Y a-t-il un accès au disque en raison d'un échange en raison d'un manque de mémoire?

S'il n'y a pas assez de mémoire, le système utilisera swap. Inversement, s'il y a beaucoup d'accès au swap, il y a une possibilité de manquer de mémoire.

Procédure d'enquête sur les goulots d'étranglement

Jusqu'à présent, nous avons vu les concepts de charge CPU et de charge d'E / S. Ensuite, passons à la façon d'étudier les goulots d'étranglement en termes de charge du processeur et de charge d'E / S.

1.Tout d'abord, calmez l'esprit. C'est important.
2.Vérifiez la moyenne de charge en haut.
3.CPU et moi avec sar/O Vérifiez laquelle est la plus élevée.
4.Afficher les informations pour chaque processus dans ps.
5.Nous prendrons des mesures telles que la révision du programme d'exécution et le renvoi de la version.
6.S'il n'y a pas de problème d'arrêt au milieu, tuez ou redémarrez le processus défectueux.

1. Calmez-vous d'abord

Ceci est important à tout moment. Cela me fait mal aux yeux de m'en débarrasser rapidement, mais ne paniquez pas.

Traitons de la graisse.

2. Commande immédiatement TOP

Tout d'abord, voyons la moyenne de charge avec la commande TOP.

Qu'est-ce que la moyenne routière?

Le nombre de processus en attente d'exécution et d'E / S disque par unité de temps dans une CPU. Un nombre qui indique le nombre de tâches en attente par unité de temps. Si cela est élevé, cela signifie que la charge sur le système est élevée.

Qu'est-ce qu'une moyenne routière élevée?

Si la moyenne de charge est supérieure au nombre de cœurs, cela peut entraîner une charge.

$top
top - 00:41:49 up 6 days,  2:24,  1 user,  load average: 2.15, 3.02, 3.20
Tasks:  93 total,   1 running,  45 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3977928 total,  3324844 free,   121568 used,   531516 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3630656 avail Mem 

La moyenne de charge: 2,15, 3,02, 3,20 est la moyenne de charge. Les valeurs des dernières 1 minute, 5 minutes et 15 minutes à partir de la gauche.

Il y a deux choses à voir

L'état de charge moyenne dépasse-t-il le nombre de cœurs?
Le swap a-t-il lieu?

Ensuite, regardons l'état de charge de chaque cœur.

2. Utilisez la commande sar pour voir l'utilisation du processeur et le taux d'attente d'E / S

Dans le cas du multicœur, il peut ne pas être possible de juger par la seule moyenne de charge. Dans ce cas, utilisez sar -P ALL pour saisir l'état de chaque CPU individuellement. Même si plusieurs processeurs sont installés, s'il n'y a qu'un seul disque, la charge du processeur peut être répartie sur d'autres processeurs, mais les E / S ne peuvent pas être distribuées, ce qui entraîne une charge.

$ sar -P ALL
Linux 3.10.0-862.2.3.el7.x86_64 (118-27-1-88)   10/01/2018  _x86_64_    (2 CPU)

01:17:35 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:17:36 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
01:17:36 AM       0      0.00      0.00      0.00      0.00      0.00    100.00
01:17:36 AM       1      0.00      0.00      0.00      0.00      0.00    100.00

Le sens de chacun est ici.

afficher La description
%user Pourcentage de temps pendant lequel la CPU était en mode utilisateur
%system Pourcentage de temps pendant lequel le processeur était en mode noyau
%iowait Pourcentage de temps pendant lequel la CPU attendait IO
%idle Pourcentage de temps pendant lequel le processeur a été inactif

Voici ce qu'il faut voir

%Si le temps d'inactivité est petit, l'utilisation du processeur est élevée et le processeur peut être le goulot d'étranglement.

Vérifiez la transition d'état du processus affecté à la CPU avec la commande ps

Si le CPU est la cause de la charge Ensuite, voyons quel processus fait la mauvaise chose.

$ ps auwx | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  19232  1516 ?        Ss   Feb09   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Feb09   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Feb09   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    Feb09   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    Feb09   0:00 [stopper/0]
root         6  0.0  0.0      0     0 ?        S    Feb09   0:06 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    Feb09   0:00 [migration/1]
root         8  0.0  0.0      0     0 ?        S    Feb09   0:00 [stopper/1]
root         9  0.0  0.0      0     0 ?        S    Feb09   0:00 [ksoftirqd/1]

Voir ci-dessous pour la signification de chacun.

afficher La description
%CPU Utilisation du processeur de processus
%MEM Mémoire physique du processus
VSZ(RSS) Virtuel réservé par le processus(La physique)Zone mémoire
STAT État du processus
TIME Temps pendant lequel le processus a occupé la CPU
À propos de STAT (état du processus)

Les processus qui peuvent s'exécuter sur la CPU sont à l'état TASK_RUNNING. La CPU est donnée à la tâche avec la priorité la plus élevée parmi plusieurs processus dans l'état TASK_RUNNING.

Notation Statut La description
R TASK_RUNNING État exécutable
S TASK_INTERRUPTIBLE État d'attente. Le signal peut être reçu
D TASK_UNINTERRUPTIBLE État d'attente. Pas de réception de signal
Z TASK_ZOMBIE État de zombie. État après sortie
T TASK_STOPPED État de suspension

Il y a deux choses à voir

Regardez la taille du RSS pour voir s'il existe des processus extrêmement volumineux.
Vérifiez l'état de TIME. boucle infinie(TASK_RUNNING)Si, TIME continue d'augmenter.

S'il y a un échange

Si un échange se produit avec la commande TOP, cela peut être dû à une mémoire physique insuffisante. Examinons de plus près la commande sar.

$ sar -S

00:00:00 kbswpfree kbswpused%swpused  kbswpcad   %swpcad
00:10:01 2097148 0 0.00         0      0.00
00:20:01 2097148 0 0.00         0      0.00
00:30:01 2097148 0 0.00         0      0.00
00:40:01 2097148 0 0.00         0      0.00
Statut La description
kbswpfree Espace libre dans l'espace d'échange
kbswpused Capacité d'utilisation de la zone d'échange
%swpused Taux d'utilisation de la zone d'échange
kbswpcad Capacité du cache de la zone de swap

Après avoir vérifié combien de swap se produit ici, Il est facile de comprendre si vous spécifiez un intervalle avec vmstat comme vmstat 1100

$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  1 244208  10312   1552  62636    4   23    98   249   44  304 28  3 68  1  0
 0  2 244920   6852   1844  67284    0  544  5248   544  236 1655  4  6  0 90  0
 1  2 256556   7468   1892  69356    0 3404  6048  3448  290 2604  5 12  0 83  0
 0  2 263832   8416   1952  71028    0 3788  2792  3788  140 2926 12 14  0 74  0
 0  3 274492   7704   1964  73064    0 4444  2812  5840  295 4201  8 22  0 69  0
afficher La description
r Nombre de processus en attente d'exécution
b Nombre de processus dormants (interruptibles), nombre de processus non exécutables
swpd Taille de swap (Ko)
free Mémoire libre (Ko)
buff Taille de la mémoire tampon (Ko)
cache Taille de la mémoire cache (Ko)
si Taille de la mémoire permutée à partir du disque (Ko)/Secondes)
so Taille de la mémoire échangée sur le disque (Ko)/Secondes)
bi Nombre de blocs reçus du périphérique bloc (blocs)/Secondes)
bo Nombre de blocs envoyés au périphérique bloc (blocs)/Secondes)
in Nombre d'interruptions/Secondes
cs Nombre de commutateurs de contexte/Secondes
us Rapport de temps d'utilisation du processeur du processus utilisateur
sy Temps utilisé pour exécuter le code du noyau
id Pourcentage de temps pendant lequel le processeur est inactif
wa Le processeur est moi/En attendant O
st Pourcentage de temps pendant lequel le système d'exploitation invité n'a pas été alloué au processeur
r et b valent généralement 0~Environ 2.
Si ce nombre est élevé, vous pouvez avoir l'impression que le serveur est lourd.

Fondamentalement, si et so sont toujours nuls.
Si un nombre apparaît toujours ici, soit la mémoire est insuffisante, soit il y a un programme qui consomme de la mémoire.

Charger le résumé des contre-mesures

Tout d'abord, déterminez s'il s'agit d'un CPU ou d'E / S avec la commande suivante

top
sar
ps
vmstat

Comme solution de contournement

Lorsque la charge du processeur est élevée

Amélioration de l'extension du serveur, de la logique du programme et de l'algorithme

Lorsque la charge d'E / S est élevée

Développez la zone de cache en ajoutant de la mémoire
Si l'extension de la mémoire n'est pas possible, envisagez de distribuer les données et d'introduire un serveur de cache
Amélioration du programme I/O réduire la fréquence

Hmm, j'en ai assez de le mettre ensemble. J'espère que cela peut expliquer la cause de la charge.

Recommended Posts

Concept de charge serveur que les nouveaux ingénieurs veulent connaître
Résumé du savoir-faire et des conseils pour la planification de nouvelles activités liées à l'IA que les ingénieurs en IA veulent connaître
Principes de base pour éviter les courriels non sollicités que les ingénieurs devraient connaître
Je veux connaître la nature de Python et pip
Résumé du savoir-faire en matière de mise en œuvre de Python et des conseils auxquels les ingénieurs en IA doivent faire attention
Je veux connaître la légende du monde des technologies informatiques
Je veux connaître la population de chaque pays du monde.
Opérations clés que vous souhaitez connaître
[Pour les débutants chez AtCoder] Parlez de la quantité de calcul que vous voulez connaître approximativement
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Je veux savoir comment fonctionne LINUX!
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
Une bibliothèque pour la science des données "Je veux faire ça" sur le bloc-notes Jupyter
Une nouvelle forme d'application qui fonctionne avec GitHub: Comment créer des applications GitHub