Indicateurs de suivi des tests de performance et guide d’analyse et de réglage

1. Quels facteurs deviendront le goulot d’étranglement du système ?

CPU : s'il y a beaucoup de calculs, ils occuperont les ressources du processeur en continu pendant une longue période, empêchant les autres ressources de rivaliser pour le processeur et de répondre lentement, provoquant ainsi des problèmes de performances du système, tels que des FullGC fréquents et des contextes fréquents. causé par le multi-threading. La commutation entraînera une occupation du processeur. En général, il est plus approprié que l'utilisation du processeur soit <75 %.

Mémoire : la mémoire Java est généralement allouée via la mémoire jvm, et la mémoire tas de la jvm est principalement utilisée pour stocker les objets créés par Java. La vitesse de lecture et d'écriture de la mémoire est très rapide, mais l'espace mémoire est limité. Lorsque l'espace mémoire est plein et que les objets ne peuvent pas être recyclés, cela entraînera un débordement de mémoire ou une fuite de mémoire.

E/S disque : l'espace de stockage du disque est beaucoup plus grand que celui de la mémoire, mais la vitesse de lecture et d'écriture du disque est plus lente que celle de la mémoire. Bien que le disque SSD soit maintenant introduit, il ne peut toujours pas être comparé à la vitesse de mémoire.

Réseau : la taille de la bande passante aura un impact important sur la transmission des données. Lorsque le niveau de concurrence augmente, le réseau peut facilement devenir un goulot d'étranglement.

Exception : si un programme Java génère une exception, elle doit être interceptée. Ce processus consomme des performances. Si la gestion des exceptions se poursuit avec une concurrence élevée, les performances du système seront affectées.

Base de données : les opérations de base de données impliquent généralement la lecture et l'écriture d'E/S disque. Un grand nombre d'opérations de lecture et d'écriture de base de données entraîneront des goulots d'étranglement dans les performances d'E/S disque, ce qui entraînera des retards dans les opérations de base de données.

Lors de la programmation simultanée, plusieurs threads sont souvent utilisés pour faire fonctionner la même ressource. À ce stade, afin de garantir l'atomicité des données, des verrous doivent être utilisés. L'utilisation de verrous entraînera un changement de contexte, entraînant ainsi une surcharge de performances. Dans JDK1, après la version 6, le verrouillage de biais, le verrouillage de rotation, le verrouillage léger, le grossissement de verrouillage et l'élimination de verrouillage ont été ajoutés.

2. Quels indicateurs sont utilisés pour mesurer la performance du système ?

1. Temps de réponse RT

Temps de réponse de la base de données, c'est-à-dire le temps des opérations de la base de données

Temps de réponse du serveur, le serveur inclut le temps consommé par les requêtes distribuées par Nginx et le temps consommé par l'exécution du programme serveur.

Temps de réponse du réseau, transmission réseau et temps nécessaire au matériel réseau pour analyser les requêtes transmises.

Temps de réponse du client, pour les clients Web et applications généraux, le temps consommé peut être ignoré. Cependant, si le client dispose d'une grande quantité de traitement logique, le temps consommé peut devenir plus long.

2. Débit TPS

Débit du disque : entrées et sorties IOPS (Entrée/Sortie par seconde) par seconde. Il s'agit du nombre de requêtes d'E/S que le système peut gérer par unité de temps. Les requêtes d'E/S sont généralement des requêtes d'opération de lecture ou d'écriture de données. Faites attention. au hasard. Performances de lecture et d'écriture, adaptées aux applications avec lecture et écriture aléatoires fréquentes, telles que le stockage de petits fichiers et les serveurs de messagerie. Le débit de données, qui correspond à la quantité de données pouvant être transmises par unité de temps, est utilisé pour les applications qui nécessitent un grand nombre de lectures et d'écritures séquentielles, ainsi qu'une grande quantité de données continues, telles que le montage vidéo.

Débit réseau : fait référence au débit de données maximum que l'appareil peut accepter sans perte de trame lors de la transmission réseau. Le débit du réseau n'est pas seulement lié à la bande passante, mais également étroitement lié à la puissance de traitement du processeur, de la carte réseau, du pare-feu et des E/S. Le débit est déterminé par la puissance de traitement de la carte réseau, l'algorithme du programme interne et la bande passante.

3. Utilisation des ressources

Pour l'utilisation du processeur, vous pouvez d'abord comprendre les informations de base du processeur, y compris le nombre de processeurs physiques et le nombre de cœurs d'un seul processeur. Vous pouvez ensuite vérifier l'utilisation via les commandes, vmstat, mpstat, top

Utilisation de la mémoire, free -m, vmstat, top

E/S disque, iostat, iotop

E/S réseau, netstat, ifconfig, tcpstat

3. Problèmes à noter lors de l'exécution de tests de performances

Lorsque nous effectuons des tests de performances, le système fonctionnera de plus en plus vite et les vitesses d'accès ultérieures seront plusieurs fois plus rapides que notre première vitesse d'accès. En effet, l'ordre de compilation du langage Java est que le fichier .java est d'abord compilé dans le fichier .class. , puis convertissez le bytecode .class en code machine local via l'interpréteur avant de pouvoir l'exécuter.

Afin d'économiser de la mémoire et de l'efficacité d'exécution, lorsque le code est initialement exécuté, l'interpréteur interprétera et exécutera d'abord ce code. À mesure que le nombre de fois où le code est exécuté augmente, la machine virtuelle détecte qu'une certaine méthode ou un certain code s'exécute particulièrement fréquemment et est identifiée comme un code de point chaud.

Afin d'améliorer l'efficacité d'exécution du code chaud, la machine virtuelle compilera ces codes en code machine local lié à la plate-forme via un compilateur juste à temps (JIT) pendant l'exécution, puis les stockera dans la mémoire obtenue. Cela entraînera un fonctionnement lent du système pour la première fois et des temps d'accès ultérieurs plusieurs fois plus rapides.

Lors des tests de performances, l'ensemble de données traité dans chaque test est le même, mais les résultats sont différents, car le test s'accompagne de nombreux facteurs instables, tels que l'influence d'autres processus sur la machine, les fluctuations du réseau et chacun. Les étapes du garbage collection JVM sont différentes. Nous pouvons faire la moyenne des résultats des tests à travers plusieurs tests.Tant que la valeur moyenne se situe dans une plage raisonnable et que la fluctuation n'est pas importante, le test de performance sera réussi.

4. Lorsque vous localisez des problèmes de performances, vous pouvez utiliser une analyse stratégique et un dépannage ascendants.

Après avoir effectué le test de stress, nous générerons un rapport de test de performances , qui comprend RT, TPS, TP99, le CPU, la mémoire, les E/S du serveur stressé et la fréquence GC de la JVM. Les goulets d'étranglement en matière de performance peuvent être détectés grâce à ces indicateurs, et nous pouvons les analyser de manière ascendante.

1. Tout d'abord, au niveau du système d'exploitation, vérifiez si l'utilisation du processeur, de la mémoire, des E/S et du réseau du système est anormale, puis utilisez des commandes pour rechercher des journaux anormaux et enfin trouvez la cause du goulot d'étranglement grâce à l'analyse des journaux.

2. Vous pouvez également vérifier la fréquence de récupération de place et l'allocation de mémoire de la JVM à partir du niveau JVM de l'application Java pour voir s'il y a des anomalies, analyser les journaux de récupération de place et trouver la cause du goulot d'étranglement.

3. S'il n'y a pas d'exceptions au niveau du système et de la JVM, vous pouvez alors vérifier s'il existe des goulots d'étranglement en termes de performances au niveau de la couche métier du service d'application, tels que des problèmes de programmation Java, des goulots d'étranglement en lecture et en écriture de la base de données, etc.

5. Lors de l'optimisation des problèmes de performances, vous pouvez utiliser des stratégies d'optimisation descendantes.

La séquence de réglage globale peut aller du réglage métier au réglage de la programmation, et enfin au réglage du système.

1. Réglage de la couche d'application

La première est d'optimiser le code. Les problèmes de code sont souvent exposés en raison de la consommation des ressources système. Par exemple, le code provoque un débordement de mémoire, provoquant un manque de mémoire de la JVM, et des FullGC fréquents se produisent, ce qui entraîne une utilisation élevée du processeur. .

La deuxième est d'optimiser la conception, principalement pour optimiser le code de la couche métier et de la couche middleware.Par exemple, vous pouvez utiliser le mode proxy et le placer dans le scénario de création d'objets fréquemment appelés pour partager un objet créé et réduire la consommation de création objets.

La troisième étape consiste à optimiser l'algorithme et à choisir l'algorithme approprié pour réduire la complexité temporelle.

2. Optimisation du middleware : optimisation de MySQL

1) Structure des tables et optimisation des index

Principalement pour optimiser la conception de la base de données, la conception de la structure des tables et les dimensions des paramètres d'index. Lors de la conception de la structure des tables, tenez compte des capacités d'expansion horizontale et verticale de la base de données, planifiez à l'avance la croissance future du volume de données, du volume de lecture et d'écriture et planifiez les sous -bases de données.Plan de sous-tables. Choisissez les types de données appropriés pour les champs, en préférant les structures de données plus petites.

2) Optimisation des instructions SQL

Principalement pour optimiser les instructions SQL, utilisez expliquer pour afficher le plan d'exécution et voir si et quels index sont utilisés. Vous pouvez également utiliser la commande Profil pour analyser le temps passé à chaque étape de l'exécution de l'instruction.

3) Optimisation des paramètres MySQL

Principalement pour optimiser la configuration du service MySQL, comme la gestion du nombre de connexions, et l'optimisation des différentes tailles de cache comme le cache d'index, le cache de requêtes, le cache de tri, etc.

4) Configuration du matériel et du système

Optimisez les périphériques matériels et les paramètres du système d'exploitation, tels que l'ajustement des paramètres du système d'exploitation, la désactivation du swap, l'augmentation de la mémoire et la mise à niveau des disques SSD.

3. Réglage du système

Le premier est le réglage du système d'exploitation. Les paramètres du noyau pour les opérations Linux peuvent être ajustés pour atteindre l'objectif de fournir des performances élevées.

Deuxièmement, le réglage JVM, la configuration d'un espace mémoire JVM raisonnable et d'un algorithme de récupération de place pour améliorer les performances.Par exemple, si la logique métier crée des objets volumineux, nous pouvons configurer pour placer les objets volumineux directement dans l'ancienne génération, ce qui peut réduire YongGC se produit fréquemment dans la jeune génération, réduisant le temps d'utilisation du processeur.

4. Stratégies de réglage

La première consiste à échanger du temps contre de l'espace. Parfois, le système n'a pas d'exigences élevées en matière de vitesse de requête mais des exigences élevées en matière d'espace de stockage. À l'heure actuelle, nous pouvons envisager d'échanger du temps contre de l'espace.

Deuxièmement, l'espace est échangé contre du temps et l'espace de stockage est utilisé pour améliorer la vitesse d'accès.Un exemple typique est la stratégie de sous-base de données et de table de MySQL.Lorsque les données du formulaire MySQL sont stockées au-delà de dizaines de millions, les performances de lecture et d'écriture diminuent. À ce stade, nous pouvons diviser les données. , afin d'atteindre l'objectif d'améliorer les performances lors des requêtes, les données de chaque table sont petites.

5. Stratégie de désinvestissement

Une fois le système réglé, il y aura toujours des problèmes de performances. À ce stade, nous devons avoir une stratégie de dissimulation. La première consiste à limiter le flux, à fixer la limite d'accès maximale pour l'entrée du système, et en même temps , prenez des mesures coupe-circuit pour renvoyer les demandes infructueuses. La seconde est l'expansion horizontale : lorsque le nombre de visites dépasse un certain seuil, le système peut automatiquement augmenter les services horizontalement.

Enfin, je voudrais remercier tous ceux qui lisent attentivement mon article. La réciprocité est toujours nécessaire. Même si ce n'est pas une chose très précieuse, si vous pouvez l'utiliser, vous pouvez le prendre directement :

Insérer la description de l'image ici

Ces informations devraient constituer l'entrepôt de préparation le plus complet et le plus complet pour les amis [des tests de logiciels]. Cet entrepôt a également accompagné des dizaines de milliers d'ingénieurs de test tout au long du voyage le plus difficile. J'espère qu'il pourra également vous aider !   

Je suppose que tu aimes

Origine blog.csdn.net/YLF123456789000/article/details/133273735
conseillé
Classement