Lorsqu'un serveur basé sur le système d'exploitation Linux est en cours d'exécution, il représentera également diverses informations sur les paramètres. De manière générale, le personnel d'exploitation et de maintenance et les administrateurs système seront extrêmement sensibles à ces données, mais ces paramètres sont également très importants pour les développeurs, surtout lorsque votre programme ne fonctionne pas correctement, ces indices peuvent souvent aider à localiser et suivre rapidement les problèmes.
Voici quelques outils simples pour visualiser les paramètres pertinents du système. Bien entendu, de nombreux outils fonctionnent également en analysant et en traitant les données sous /proc et /sys, ainsi que ceux permettant un suivi des performances plus détaillé et professionnel. réglage, vous aurez peut-être également besoin d'outils et de technologies plus professionnels (perf, systemtap, etc.) pour terminer. Après tout, la surveillance des performances du système en elle-même est un sujet universitaire.
1. Catégories de processeur et de mémoire
1.1 haut
➜ ~ haut
Les trois valeurs après la première ligne sont la charge moyenne du système au cours des 1, 5 et 15 années précédentes. On peut également voir que le système. La charge a une tendance à la hausse, stable et à la baisse, lorsque cette valeur dépasse le nombre d'unités exécutables du processeur, cela signifie que les performances du processeur sont devenues saturées et sont devenues un goulot d'étranglement.
La deuxième ligne compte les informations sur l'état des tâches du système. Inutile de dire que l'exécution inclut naturellement celles qui s'exécutent sur le processeur et celles dont l'exécution est planifiée ; la mise en veille est généralement une tâche en attente de la fin d'un événement (comme une opération d'E/S), et la subdivision peut inclure des types interruptibles et ininterruptibles ; arrêté est quelque chose qui est suspendu. Les tâches envoient généralement SIGSTOP ou exécutent Ctrl-Z sur une tâche de premier plan pour la suspendre ; les tâches zombies seront automatiquement recyclées à la fin du processus, le descripteur de tâche contenant la tâche de sortie doit être accessible par le processus parent avant de pouvoir être publié.Ce type de processus s'affiche comme un état défunt, que ce soit parce que le processus parent s'est terminé plus tôt ou n'a pas appelé wait. Lorsqu'un tel processus se produit, une attention particulière doit être accordée à savoir si la conception du programme est incorrecte. . La troisième ligne d'utilisation du CPU présente les situations suivantes selon le type :
(us) user : Le temps passé par le CPU en mode utilisateur à faible valeur agréable (haute priorité) (nice
( ni ) Nice : Le temps passé par le processeur à fonctionner avec une faible priorité en mode utilisateur avec une valeur nice élevée (faible priorité) (nice>0). Par défaut, le processus nouvellement démarré nice=0 ne sera pas inclus ici, à moins que la valeur nice du programme ne soit modifiée manuellement via renice ou setpriority()
● (id) ralenti : le processeur est en état d'inactivité ( exécution du noyau Temps occupé par le gestionnaire inactif
Quantity (wa) iowait : Temps passé à attendre la fin de l'IO
● (hi) irq : Temps passé par le système à traiter les interruptions matérielles
Quantity (si) softirq : Le temps nécessaire au système pour traiter les interruptions logicielles. N'oubliez pas que les interruptions logicielles sont divisées en softirqs, tasklets (en fait un cas particulier des premiers) et files d'attente de travail. le temps est compté ici. Après tout, le travail L'exécution des files d'attente n'est plus dans le contexte d'interruption
(st) voler : C'est significatif dans le cas d'une machine virtuelle, car le CPU sous la machine virtuelle partage également le CPU physique, donc cette période de temps indique que la machine virtuelle attend le temps CPU de planification de l'hyperviseur signifie également que l'hyperviseur planifie le CPU sur d'autres CPU pour l'exécution pendant cette période, et les ressources CPU pendant cette période sont "volées". ". Cette valeur n'est pas 0 sur ma machine KVM VPS, mais elle est seulement de l'ordre de 0,1. Peut-elle être utilisée pour déterminer si le VPS est en surréservation ?
Une utilisation élevée du processeur signifie souvent quelque chose, qui fournit également des idées de dépannage correspondantes lorsque l'utilisation du processeur du serveur est trop élevée :
1 Lorsque l'utilisation de l'utilisateur est trop élevée Quand , il s'agit généralement d'un individu. les processus qui occupent une grande quantité de CPU à ce stade, il est facile de trouver le programme via top ; à ce stade, si vous pensez que le programme est anormal, vous pouvez utiliser perf et d'autres idées pour trouver la fonction d'appel à chaud pour. enquête plus approfondie ;
2. Lorsque le taux d'occupation du système est trop élevé, s'il y a de nombreuses opérations d'E/S (y compris les E/S du terminal), cela peut entraîner un taux d'occupation élevé de cette partie du processeur, comme sur les fichiers. serveur, serveur de base de données et autres types de serveurs, sinon (Par exemple, >20%) Il est très probable que certaines parties du noyau et des modules pilotes aient des problèmes
Lorsque le taux d'occupation est trop élevé ; élevé, il s'agit généralement d'un comportement intentionnel. Lorsque l'initiateur du processus sait que certains processus Si le CPU occupe un niveau élevé, sa belle valeur sera définie pour garantir qu'elle n'inondera pas les demandes d'utilisation du CPU des autres processus
4. Lorsque le taux d'occupation iowait est trop élevé, cela signifie généralement que l'efficacité du fonctionnement IO de certains programmes est très faible, ou que les performances du périphérique IO correspondant sont si faibles que les opérations de lecture et d'écriture prennent beaucoup de temps. pour compléter ;
5. Lorsque le taux d'occupation irq/softirq est trop élevé, il est probable qu'il y ait un problème avec certains périphériques, entraînant un grand nombre de requêtes irq à ce moment-là, vérifiez le /. fichier proc/interrupts pour connaître le problème ;
6. Lorsque le taux d'occupation du vol est trop élevé, la machine virtuelle du fabricant sans scrupules l'a survendu !
Les quatrième et cinquième lignes sont les informations sur la mémoire physique et la mémoire virtuelle (partition d'échange) : total = libre + utilisé + buff/cache. Maintenant, les tampons et les informations Mem mises en cache sont additionnés, mais les tampons et les mises en cache.
La relation de Mem n'est pas claire à bien des égards. En fait, en comparant les données, ces deux valeurs sont les champs Buffers et Cached dans /proc/meminfo : Buffers est un cache de blocs pour disque brut, mettant principalement en cache les métadonnées du système de fichiers (telles que les informations de super bloc , etc.) sous forme de bloc brut, cette valeur est généralement relativement faible (environ 20 M) ; Le cache est utilisé pour lire et mettre en cache certains fichiers spécifiques afin d'augmenter l'efficacité de l'accès aux fichiers. On peut dire qu'il est utilisé pour la mise en cache des fichiers. le système de fichiers.
Etava Mem est une nouvelle valeur de paramètre, utilisée pour indiquer combien d'espace mémoire peut être accordé à un programme nouvellement ouvert sans échange, ce qui équivaut à peu près à free + buff/cached, et cela confirme également Selon l'instruction ci-dessus, free + buffers + cached Mem est la mémoire physique réellement disponible. De plus, l'utilisation d'une partition de swap n'est pas nécessairement une mauvaise chose, donc l'utilisation de la partition de swap n'est pas un paramètre sérieux, mais des échanges fréquents d'entrée/sortie ne sont pas une bonne chose. Cette situation nécessite une attention particulière et indique généralement un manque de mémoire physique.
Enfin, la liste d'utilisation des ressources de chaque programme, où l'utilisation du processeur est la somme de l'utilisation de tous les cœurs du processeur. Habituellement, lorsque top est exécuté, le programme lui-même lira un grand nombre d'opérations /proc, donc fondamentalement, le programme top lui-même sera parmi les meilleurs.
Bien que top soit très puissant, il est généralement utilisé pour la surveillance en temps réel des informations système sur la console. Il ne convient pas pour surveiller les informations de charge du système pendant une longue période (jours ou mois). Avec le temps, les processus de courte durée seront également manqués et ne pourront pas être fournis de statistiques de sortie.
1.2 vmstat
vmstat est un autre outil de détection de système couramment utilisé en plus de top. La capture d'écran ci-dessous est la charge du système lorsque j'ai compilé boost avec -j4.
r représente le nombre de processus exécutables et les données sont à peu près cohérentes ; b représente le nombre de processus en veille ininterruptibles swpd représente la quantité de mémoire virtuelle utilisée ; cohérent avec top-Swap La valeur de -used a une signification, et comme le dit le manuel, le nombre de tampons est généralement beaucoup plus petit que celui de la mémoire cache. Les tampons sont généralement de l'ordre de 20M bi et bo dans le champ io l'indiquent. nombre de données reçues et envoyées au disque par seconde. Le nombre de blocs (blocs/s dans le champ système) indique le nombre d'interruptions système par seconde (y compris les interruptions d'horloge), et cs indique le nombre de changements de contexte provoqués par commutation de processus.
En parlant de cela, je pense que beaucoup de gens avaient du mal à savoir si le paramètre -j était CPU Core ou CPU Core+1 lors de la compilation du noyau Linux ? En modifiant la valeur du paramètre -j ci-dessus pour compiler Boost et le noyau Linux tout en activant la surveillance vmstat, nous avons constaté que le changement de contexte n'a fondamentalement pas changé dans les deux cas, et ce n'est qu'après avoir considérablement augmenté la valeur -j que le changement de contexte augmentera de manière significative. Cela semble inutile, je suis trop obsédé par ce paramètre, même si je n'ai pas encore testé l'heure de compilation spécifique. Les informations indiquent que s'il n'est pas dans l'état de démarrage du système ou de référence, il doit y avoir un problème avec le programme avec le paramètre context switch>100000.
1.3 pidstat
Si vous souhaitez suivre un processus de manière complète et spécifique, il n'y a rien de plus approprié que pidstat - l'espace de pile, les défauts de page, la commutation active et passive et d'autres informations sont collectées au fond. Le paramètre le plus utile de cette commande est -t, qui peut répertorier des informations détaillées sur chaque thread du processus.
-r : Afficher les défauts de page et l'utilisation de la mémoire. Les défauts de page surviennent lorsque le programme doit accéder à une page qui est mappée dans l'espace mémoire virtuelle mais qui n'a pas encore été chargée dans la mémoire physique. défauts. Le type est
minflt/s, qui fait référence à des défauts mineurs lorsque la page physique à laquelle il faut accéder existe déjà dans la mémoire physique pour certaines raisons (telles que des pages partagées, des mécanismes de cache, etc. ), c'est uniquement dans le tableau des pages du processus actuel. Il n'y a pas de référence dans la MMU. Il suffit de définir l'entrée correspondante. Le coût est assez faible. La MMU doit demander une page physique libre dans la mémoire physique actuellement disponible (s'il n'y a pas de pages libres disponibles, vous devez basculer d'autres pages physiques vers l'espace d'échange pour libérer les pages physiques libres), puis charger les données depuis. l'extérieur dans la page physique et définissez l'entrée correspondante. Ce coût est assez élevé, il existe plusieurs différences au niveau des données par rapport aux anciens
-s : utilisation de la pile, y compris l'espace de pile réservé par StkSize pour. le thread et l'espace de pile réellement utilisé par StkRef. En utilisant ulimit -s, nous avons constaté que l'espace de pile par défaut sur CentOS 6.x est de 10 240 Ko, tandis que la taille par défaut de l'espace de pile sur CentOS 7.x et les séries Ubuntu est de 8 196 Ko
-u : Utilisation du CPU, les paramètres sont similaires aux précédents
-w : Le nombre de changements de contexte de thread, également subdivisé en cswch/s en raison de en attente de ressources, etc. Statistiques sur la commutation active causée par des facteurs et la commutation passive causée par le temps CPU du thread nvcswch/s
Ce sera très gênant si vous obtenez d'abord le pid du programme via ps à chaque fois, puis faites fonctionner le pidstat, c'est donc le tueur -C Vous pouvez spécifier une certaine chaîne, et si la commande contient cette chaîne, les informations du programme seront imprimées et comptées -l peut afficher le nom complet du programme et les paramètres ➜ ~ pidstat -w. -t -C "ailaw" - l
Il semble que lors de la visualisation d'une tâche unique, notamment multithread, pidstat soit plus utile que le ps couramment utilisé !
1.4 Autres
Lorsque vous devez surveiller un seul processeur séparément, en plus de htop, vous pouvez également utiliser mpstat pour vérifier si la charge de travail de chaque cœur sur le processeur SMP est équilibrée et si certains threads Hotspot occupent Core. ➜ ~ mpstat -P ALL 1
Si vous souhaitez surveiller directement les ressources occupées par un processus, vous pouvez utiliser top -u taozj pour filtrer les autres processus indépendants de l'utilisateur, ou vous pouvez utiliser la méthode suivante pour select, ps La commande peut personnaliser les informations d'entrée qui doivent être imprimées :
while :; do ps -eo user,pid,ni,pri,pcpu,psr,comm | ; done
Si vous souhaitez clarifier la relation d'héritage, le paramètre couramment utilisé suivant peut être utilisé pour afficher la structure de l'arborescence des processus. L'effet d'affichage est beaucoup plus détaillé et plus beau que pstree
➜. ~ ps axjf
II, classe Disk IO
iotop peut afficher intuitivement le taux de lecture du disque en temps réel de chaque processus et thread lsof peut non seulement afficher l'ouverture ; informations sur les fichiers ordinaires (utilisateur), mais également exploiter /dev/sda1 Ce type d'informations d'ouverture de fichier de périphérique, par exemple, lorsque la partition ne peut pas être démontée, vous pouvez utiliser lsof pour connaître l'état d'utilisation de la partition de disque et ajouter le paramètre +fg peut également afficher en plus la marque du drapeau d'ouverture du fichier.
2.1 iostat
➜ ~ iostat -xz 1
En fait, que vous utilisiez iostat -xz 1 ou sar -d 1, les paramètres importants pour le disque sont :
avgqu-s : La longueur moyenne de la file d'attente pour les requêtes d'E/S envoyées au périphérique. Pour un seul disque, une valeur > 1 indique la saturation du périphérique, sauf pour les disques logiques avec plusieurs baies de disques <.>
await( r_await, w_await) : temps d'attente moyen (ms) pour chaque opération de demande d'E/S de périphérique, y compris la somme du temps nécessaire pour que la demande soit mise en file d'attente et servie svctm ; envoyée au périphérique Demande d'E/S Le temps de service moyen (ms). Si svctm est très proche d'attendre, cela signifie qu'il n'y a presque pas d'attente d'E/S et que les performances du disque sont très bonnes. Sinon, le temps d'attente de la file d'attente du disque est. long et la réponse du disque est médiocre ; %util : L'utilisation du périphérique indique la proportion de temps consacré au travail d'E/S par seconde. Lorsque %util>60 %, les performances d'un seul disque seront. diminution (reflétée par l'augmentation de l'attente). Lorsqu'elle est proche de 100%, les performances du périphérique diminuent, sauf pour les disques logiques avec plusieurs baies de disques De plus, bien que les performances des disques soient surveillées. est relativement médiocre, cela n'affecte pas nécessairement la réponse de l'application. Le noyau utilise généralement la technologie d'E/S de manière asynchrone et utilise la technologie de mise en cache de lecture et d'écriture pour améliorer les performances, mais cela est limité par les limitations de mémoire physique ci-dessus. Les paramètres ci-dessus sont également utiles pour les systèmes de fichiers réseau.3. Catégorie Réseau
L'importance des performances du réseau pour le serveur va de soi. L'outil iptraf peut afficher intuitivement les informations de vitesse d'envoi et de réception du réseau. carte, rendant la comparaison simple et pratique. Des informations de débit similaires peuvent également être obtenues via sar -n DEV 1, et les cartes réseau sont équipées en standard d'informations de débit maximum, telles que les cartes réseau 100M et les cartes réseau Gigabit, il est donc facile de vérifiez l'utilisation de l'appareil. Habituellement, le taux de transmission de la carte réseau n'est pas le plus concerné dans le développement du réseau, mais le taux de perte de paquets, le taux de retransmission, le délai du réseau et d'autres informations des connexions UDP et TCP spécifiques. 3.1 netstat➜ ~ netstat -sAffiche les informations globales sur les données de chaque protocole depuis le démarrage du système. Bien que les informations sur les paramètres soient relativement riches et utiles, la valeur cumulée ne peut être obtenue que lorsque la différence entre deux exécutions est utilisée pour obtenir les informations sur l'état du réseau du système actuel, ou que vous pouvez utiliser une montre pour visualiser la tendance des changements numériques. Par conséquent, netstat est généralement utilisé pour détecter les informations de port et de connexion :netstat –all(a) –numeric(n) –tcp(t) –udp(u) –timers(o) –listening(l) –program(p)
actif/s : connexion TCP initiée localement, par exemple via connect(), l'état TCP passe de CLOSED -> SYN-SENT
passive/s : connexion TCP initiée à distance, par exemple via accept (), l'état TCP change de LISTEN -> SYN-RCVD
retrans/s(tcpRetransSegs) : le nombre de retransmissions TCP par seconde, généralement lorsque la qualité du réseau est mauvaise ou que le serveur est surchargé et que les paquets sont perdu, une opération de retransmission se produira selon le mécanisme de retransmission de confirmation de TCP
isegerr/s(tcpInErrs) : des paquets d'erreur sont reçus toutes les secondes (comme un échec de la somme de contrôle)
UDP ➜ ~ sudo sar -n UDP 1
noport/s(udpNoPorts) : Nombre de datagrammes reçus par seconde mais aucune application n'est sur le port de destination spécifié
idgmerr/s(udpInErrors) : En plus de ce qui précède raisons, le nombre de datagrammes reçus mais incapables d'être livrés
Bien sûr, ces données peuvent illustrer dans une certaine mesure la fiabilité du réseau, mais elles ne peuvent être combinées qu'avec des scénarios de demande commerciale spécifiques. Cela a du sens.
3.3 tcpdump
tcpdump doit être considéré comme une bonne chose. Nous savons tous que nous aimons utiliser Wireshark lors du débogage local, mais que devons-nous faire s'il y a un problème avec le serveur en ligne ?
La référence en annexe donne une idée : restaurez l'environnement et utilisez tcpdump pour capturer les paquets. Lorsque le problème se reproduit (comme l'affichage du journal ou un certain état), la capture des paquets peut être terminée, et tcpdump. Il possède le paramètre -C/-W, qui peut limiter la taille du fichier de stockage de paquets capturés. Lorsque cette limite est atteinte, les données de paquets enregistrées sont automatiquement pivotées, de sorte que le nombre total de paquets capturés est contrôlable. Après cela, vous pouvez retirer les paquets de données de la ligne et utiliser Wireshark pour les visualiser comme vous le souhaitez. Ne serait-ce pas amusant ? Bien que tcpdump n'ait pas d'interface graphique, sa fonction de capture de paquets n'est pas faible du tout. Vous pouvez spécifier divers paramètres de filtrage tels que la carte réseau, l'hôte, le port, le protocole, etc. Les paquets capturés sont complets et ont des horodatages, donc le paquet. L'analyse des programmes en ligne est également simple.
Ce qui suit est un petit test. On peut voir que Chrome lance automatiquement l'établissement de trois connexions au serveur Web au démarrage. Le paramètre de port dst étant ici restreint, le paquet de réponse du serveur est filtré. out. Retirez-le et ouvrez-le avec Wireshark. Le processus d'établissement d'une connexion via SYNC et ACK est toujours très évident ! Lorsque vous utilisez tcpdump, vous devez configurer autant que possible les conditions du filtre de capture. D'une part, cela facilite l'analyse ultérieure. D'autre part, une fois tcpdump activé, cela affectera les performances de la carte réseau et du système. ce qui affectera à son tour les performances des services en ligne.
Pour plus d'articles sur Linux, veuillez visiter la colonne Tutoriel Linux pour apprendre !
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!