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/
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.
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.
1.Charge CPU
2. I/O charge
L'état dans lequel le processus occupe la CPU (calculé par la CPU)
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.
Vérifiez si le programme est hors de contrôle (boucle infinie, etc.).
Vérifiez le traitement dans la dernière version.
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.
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.
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.
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.
Tout d'abord, voyons la moyenne de charge avec la commande TOP.
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.
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.
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.
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 |
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.
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.
Tout d'abord, déterminez s'il s'agit d'un CPU ou d'E / S avec la commande suivante
top
sar
ps
vmstat
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