Indicateurs de suivi des tests de performance et analyse et réglage | Équipe technique JD Cloud

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

1. CPU, s'il y a beaucoup de calculs, ils occuperont les ressources du CPU pendant une longue période sans interruption, empêchant les autres ressources de concourir pour le CPU et de répondre lentement, ce qui entraînera des problèmes de performances du système, tels que des FullGC fréquents, et le contexte causé par le multi-threading Une commutation fréquente entraînera une occupation du processeur.Généralement, il est plus approprié que l'utilisation du processeur soit inférieure à 75%.

2. Mémoire, la mémoire Java est généralement allouée via la mémoire jvm, en utilisant principalement la mémoire de tas dans jvm 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, un débordement de mémoire ou une fuite de mémoire se produit.

3. Pour les E/S de 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 lecteur à semi-conducteurs SSD soit introduit maintenant, il ne peut toujours pas être comparé à la vitesse de la mémoire.

4. La taille du réseau et la bande passante auront un impact important sur les données transmises.Lorsque la quantité de simultanéité augmente, le réseau deviendra facilement un goulot d'étranglement.

5. Exceptions, programmes Java, lancement d'exceptions, les exceptions doivent être interceptées, ce processus consomme des performances, si dans le cas d'une concurrence élevée, continuez à gérer les exceptions, les performances du système seront affectées.

6. Base de données. Les opérations de base de données impliquent généralement des lectures et des écritures d'E/S disque. Un grand nombre de lectures et d'écritures de base de données entraînera des goulots d'étranglement des performances d'E/S disque et retardera les opérations de base de données.

7. 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 une commutation de contexte, ce qui entraînera une surcharge de performances Après JDK1.6, les verrous biaisés, les verrous de rotation, les verrous légers, le grossissement des verrous et l'élimination des verrous ont été ajoutés.

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

1. Temps de réponse RT, y compris les éléments suivants

1.1 Temps de réponse de la base de données, c'est-à-dire le temps de fonctionnement de la base de données

1.2 Le temps de réponse du serveur, le serveur comprend le temps consommé par la requête distribuée par Nginx et le temps consommé par l'exécution du programme serveur.

1.3 Temps de réponse du réseau, transmission du réseau et temps consommé par le matériel du réseau pour analyser la requête transmise

1.4 Le temps de réponse du client est généralement négligeable pour les clients Web et App, mais si le client a beaucoup de traitement logique, le temps consommé peut devenir plus long.

2. Débit TPS

2.1 Débit disque

IOPS (Entrée/Sortie par seconde) est l'entrée et la sortie 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 données de lecture ou d'écriture, en se concentrant sur des opérations aléatoires. performances de lecture et d'écriture. Il convient aux applications avec des lectures et écritures aléatoires fréquentes, telles que le stockage de petits fichiers et le serveur de messagerie. Le débit de données, c'est la quantité de données qui peut être transmise par unité de temps. Pour les applications avec un grand nombre de lectures et d'écritures séquentielles, une grande quantité de données continues est transmise, comme le montage vidéo.

2.2 Débit du réseau

Il fait référence au débit de données maximal que l'appareil peut accepter sans perte de trame pendant la transmission sur le 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, à la carte réseau, au pare-feu et aux E / S. Le débit est déterminé par la puissance de traitement de la carte réseau, l'algorithme de programme interne et la bande passante.

3. Utilisation des ressources

3.1 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, puis vous pouvez vérifier l'utilisation via les commandes, vmstat, mpstat, top

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

3.3 E/S disque, iostat, iotop,

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

3. Problèmes à remarquer dans les tests de performance

1. Lorsque nous effectuons des tests de performances, le système s'exécute de plus en plus vite et la vitesse d'accès suivante est plusieurs fois plus rapide que notre première vitesse d'accès.C'est parce que l'ordre de compilation du langage Java est que le fichier .java d'abord Compilez-le dans un fichier .class, puis convertissez le bytecode du .class en code machine local via un interpréteur avant qu'il ne puisse s'exécuter. Afin d'économiser de la mémoire et de l'efficacité d'exécution, lors de l'exécution initiale du code, l'interpréteur interprétera et exécutera d'abord ce code. Au fur et à mesure que le nombre d'exécutions de code augmente, la machine virtuelle constate qu'une certaine méthode ou un certain code s'exécute particulièrement fréquemment, et il est identifié comme un code de point chaud (Hot Spot Code). Afin d'améliorer l'efficacité d'exécution des codes chauds, la machine virtuelle compilera ces codes dans des codes machine locaux liés à la plate-forme via un compilateur juste-à-temps (JIT) au moment de l'exécution, puis les stockera dans la mémoire obtenue à partir de . Cela ralentira le système pour la première fois et la vitesse des visites suivantes sera plusieurs fois plus rapide.

2. Lors des tests de performance, les ensembles de données traités par chaque test sont les mêmes, mais les résultats sont différents, car le test est accompagné de nombreux facteurs instables, tels que l'influence d'autres processus sur la machine, les fluctuations du réseau, et Chaque étape de la récupération de place JVM est différente. Nous pouvons réussir plusieurs tests et faire la moyenne des résultats du test. Tant que la valeur moyenne se situe dans une plage raisonnable et que la fluctuation n'est pas trop importante, dans ce cas, le test de performance réussira.

4. Lors de la localisation des problèmes de performances, vous pouvez utiliser l'analyse de stratégie ascendante et le dépannage

Après avoir effectué le test de pression, nous produirons un rapport de test de performance, y compris RT, TPS, TP99, le CPU, la mémoire, les E/S du serveur stressé et la fréquence GC de la JVM. Les goulots d'étranglement de performance peuvent être trouvés à travers ces indicateurs. Nous pouvons utiliser une approche ascendante pour l'analyse.

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 recherchez les journaux anormaux via des commandes, et enfin trouvez la cause du goulot d'étranglement via l'analyse des journaux.

2. À partir du niveau JVM de l'application Java, vous pouvez vérifier la fréquence de récupération de place de la JVM et s'il existe une anomalie dans l'allocation de mémoire, analyser le journal de récupération de place et rechercher la cause du goulot d'étranglement.

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

5. Lors de l'optimisation des problèmes de performances, vous pouvez utiliser une stratégie d'optimisation descendante

La séquence de réglage globale, nous pouvons passer 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 application

La première consiste à optimiser le code. Les problèmes de code sont souvent exposés en raison de la consommation de ressources système. Par exemple, le code provoque un débordement de mémoire, ce qui épuise la mémoire de la JVM, et des FullGC se produisent fréquemment, ce qui entraîne un CPU élevé.

La seconde est d'optimiser la conception, principalement pour optimiser le code de la couche métier et de la couche middleware. Par exemple, le mode proxy peut être utilisé dans la scène de création d'objets fréquemment invoqués, et l'objet de création peut être partagé avec réduire la consommation de création d'objets.

Le troisième est d'optimiser l'algorithme, choisissez l'algorithme approprié pour réduire la complexité temporelle.

2. Réglage du middleware

Réglage MySQL

1), structure des tables et optimisation des index.

Il s'agit principalement d'optimiser la conception de la base de données, la conception de la structure de la table et les dimensions des paramètres d'index. Lors de la conception de la structure de la table, 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 plan pour les sous-bases de données Plan de sous-table. Choisissez un type de données approprié pour les champs, en préférant des structures de données plus petites.

2), optimisation des instructions SQL.

Il s'agit principalement d'optimiser l'instruction SQL, d'utiliser expliquer pour afficher le plan d'exécution, pour voir si les index sont utilisés et quels index sont utilisés. Vous pouvez également utiliser la commande Profile pour analyser la consommation de temps de chaque étape du processus d'exécution de l'instruction.

3), optimisation des paramètres MySQL.

Il s'agit principalement d'optimiser la configuration des services MySQL, comme la gestion du nombre de connexions, et d'optimiser la taille des différents caches tels que le cache d'index, le cache de requêtes et le cache de tri.

4), configuration matérielle et système.

Optimisez les périphériques matériels et les paramètres du système d'exploitation, tels que le réglage des paramètres du système d'exploitation, la désactivation de l'échange, 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.Le réglage des paramètres du noyau du fonctionnement de Linux peut être réglé pour atteindre l'objectif de fournir des performances élevées.
Deuxièmement, le réglage JVM, la définition d'un espace mémoire JVM raisonnable et des algorithmes de récupération de place pour améliorer les performances, par exemple, si la logique métier crée de gros objets, nous pouvons définir les gros objets directement dans l'ancienne génération, ce qui peut réduire YongGC se produit fréquemment dans la jeune génération pour réduire le temps d'utilisation du processeur.

4. Stratégie de réglage

La première consiste à échanger du temps contre de l'espace. Parfois, le système ne nécessite pas une vitesse de requête élevée mais des besoins en espace de stockage élevés. À ce stade, 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. La stratégie typique est la stratégie de sous-base de données et de sous-table de MySQL. Lorsque les données de formulaire MySQL sont stockées dans plus de dizaines de millions, les performances de lecture et d'écriture va diminuer. À ce moment, nous pouvons diviser les données. , afin de réaliser la requête, les données de chaque table sont une petite quantité, afin d'atteindre l'objectif d'amélioration des performances.

5. Stratégie de va-et-vient

Une fois le système réglé, il y aura toujours des problèmes de performances. À ce stade, nous devons avoir une stratégie ascendante. La première consiste à limiter le débit, à définir la limite d'accès maximale à l'entrée du système et à prendre le fusible des mesures pour retourner les demandes infructueuses. La seconde est l'expansion horizontale : lorsque le trafic dépasse un certain seuil, le système peut automatiquement augmenter les services horizontalement.

Auteur : JD Health Niu Jinliang

Source de contenu : communauté de développeurs JD Cloud

{{o.name}}
{{m.name}}

Guess you like

Origin my.oschina.net/u/4090830/blog/9093034