9
votes

Comment effectuer des tests de charge en utilisant JMETER et VISUALVM?

Je veux faire des tests de chargement pour 10 millions d'utilisateurs pour mon site. Le site est une application Web basée sur Java. Mon approche consiste à créer un plan de test JMeter pour tous les liens, puis à prendre un rapport pour les 10 millions d'utilisateurs. Ensuite, utilisez Jvisalvm pour faire du profilage et vérifiez s'il y a des goulots d'étranglement.

Y a-t-il un meilleur moyen de faire cela? Y a-t-il une démo existante pour faire cela? Je fais cela pour la première fois pour la première fois, alors toute aide sera très utile.


3 commentaires

Mon objectif est de soutenir au moins 10 millions d'utilisateurs.


Wow. C'est une grande question. Quelques questions à l'avant: 10 moulins sont beaucoup. Est-ce que les utilisateurs sont simultanés et uniques? Est-ce que vous frones avec des serveurs Web natifs? Vous regroupez-vous les serveurs d'applications Java? Allez-vous utiliser un équilibreur de charge? Pouvez-vous dire quel serveur d'applications vous utiliserez? Y aura-t-il d'autres dépendances telles que des bases de données, etc.?


10 millions d'utilisateurs à DB. Je peux le faire avec une procédure PL / SQL. 150 utilisateurs simultanés. Pas de regroupement. Juste en train de mettre en place une machine. Pas d'équilibreur de charge. Le serveur d'app est jetée.


5 Réponses :


7
votes

Vous êtes sur le chemin correct, mais votre limite de charge est avec un facteur élevé.

Pourquoi je dis que c'est parce que votre site aura probablement plus besoin d'une machine pour gérer des utilisateurs simultanés de 10milj. Un processus seul aurait probablement du mal à gérer les flux TCP de 32k simultanés. Faites également des mathématiques de la bande passante qu'il faudrait pour gérer réellement les utilisateurs de 10milj.

Maintenant, je ne sais pas quel type de service vous envisagez de fournir sur votre site, mais en pensant que Jvisalvm ralentit le traitement par un facteur 10 (ou plus pour la traçabilité de la méthode), vous ne mesureriez pas réellement le «monde réel "Si vous avez JMeter et Jvisalvm pour travailler en même temps.

Jvisalvm est plus utile lorsque vous exécutez des charges inférieures.

Pour créer une bonne mesure, assurez-vous d'avoir une bonne base de référence. Faites un test avec 10 utilisateurs simultanés, connectez-vous Jvisuamvm et laissez-le courir pendant un moment, pas sur toutes les valeurs intéressantes.

Après avoir eu votre ligne de base, vous pouvez commencer à ajouter plus de charge. Ajoutez 10 fois la charge (EA: 100 utilisateurs), examinez les modifications de Jvisualvm. Continuez ceci jusqu'à ce qu'il devienne évident que Jvisalvm vous ralentit, pour chaque fois que vous ajoutez une charge supplémentaire, assurez-vous d'avoir écrit les chiffres que vous êtes intéressé. Tracez les chiffres dans un graphique.

Maintenant ... interpolez le graphique (à la main) pour le nombre d'utilisateurs que vous souhaitez. Cela fonctionne pour l'utilisation de la mémoire, l'accès des disques, etc., mais pas pour le temps de processeur utilisé, car Jvisalvm mangera CPU et vous donner des numéros non valides à ce sujet (surtout si vous avez la méthode TRACING allumée).

Si vous voulez vraiment aller aussi haut que 10milj utilisateurs, je ne ferais pas confiance à JMeter non plus, j'écrirais un petit programme de test qui effectue le test que vous souhaitez. Ce serait Okey, puisque la mise en place du site pour gérer 10milj prendra également du temps, alors passez un peu de temps supplémentaire des outils de test ne sont pas un gaspillage.


2 commentaires

Unix fait un très bon point - assurez-vous de disposer d'une bonne base solide et de faire un lot de tests avec différents utilisateurs simultanés (10, 50, 100, 150) exécutant chaque test pour la même durée et au moins une heure de durée.


Dans la dernière version JDK, Jvisalvm, un profileur d'échantillonnage n'affecte pas les performances dans l'ordre de grandeur. Ce type de profilage pourrait être fait sur des serveurs de production même sur une charge modérée.



3
votes

Juste parce que vous avez 10 millions d'utilisateurs dans la base de données, cela ne signifie pas que vous devez charger un test à l'aide de nombreux utilisateurs. Pensez-y - votre site va-t-il vraiment avoir 10 millions d'utilisateurs simultanés simultanés? Pour les applications Web, un ratio d'utilisateurs enregistrés de 1: 100 est courant, c'est-à-dire que vous devez avoir plus de 100 000 utilisateurs à tout moment.

JMeter peut-il gérer ce type de charge? J'en doute. Veuillez essayer Faban à la place. C'est très léger et peut supporter des milliers d'utilisateurs sur un seul VM. Vous avez également une grande flexibilité de la création de votre charge de travail et vous pouvez également automatiser la surveillance de votre infrastructure de test.

maintenant à la partie d'analyse. Vous n'avez pas dit quel serveur vous utilisiez. Tout Java Appserver fournira un support de surveillance suffisant. Les serveurs de commerce offrent de bons outils d'interface graphique tandis que Tomcat fournit une surveillance étendue via JMX. Vous voudrez peut-être commencer ici avant de vous descendre au niveau JVM.

Pour la JVM, vous ne voulez vraiment pas utiliser VisualvM tout en exécutant un test de performance aussi important. En plus de supporter une telle charge, je suppose que vous utilisez plusieurs instances AppServer / JVM. Le problème de performance majeur est généralement GC, utilisez donc les options JVM pour collecter et enregistrer des informations GC. Vous devrez poster les données.

Ceci est un exercice non trivial - bonne chance!


2 commentaires

S'il vous plaît vérifier les commentaires. J'ai précisé que 10 millions d'utilisateurs dans DB et 150 utilisateurs simultanés.


Désolé, j'ai manqué ça. Ensuite, il est important que vous créiez votre charge de travail correctement pour accéder à tous ou à un sous-ensemble d'utilisateurs en fonction de ce que vous visez.



3
votes

Il existe deux types de test de charge - identification et débit d'étranglement. La question me conduit à croire que cela concerne les goulots d'étranglement, de sorte que le nombre d'utilisateurs est une chose d'un hareng rouge, le but étant pour une configuration donnée des zones de recherche pouvant être améliorées pour augmenter la concurrence.

Les goulots d'étranglement d'applications tombent généralement en trois catégories: base de données, fuite de mémoire ou algorithme lent. Les trouver impliquent de mettre la demande en question sous stress (c'est-à-dire une charge) pendant une période prolongée - au moins une heure, peut-être jusqu'à plusieurs jours. JMeter est un bon outil à cet effet. Une des tâches à prendre en compte est d'exécuter le même test avec la manipulation des cookies activée (c.-à-d. JMeter conserve des cookies et envoie à chaque demande suivante) et désactivé - parfois, vous obtenez des résultats très différents et cela est important car ce dernier est efficacement une simulation de ce que Les crawlers font sur votre site. Détails pour la détection de goulots d'étranglement Suivre:

base de données

Tables sans indices ni déclarations SQL impliquant plusieurs jointures sont des goulots d'étranglement des applications fréquentes. Chaque serveur de base de données que j'ai traité, MySQL, SQL Server et Oracle a une manière de vous enregistrer ou d'identifier des relevés SQL lents d'exécution. MySQL possède le journal de requête lente, alors que SQL Server a des vues de gestion dynamiques qui suivent le SQL fonctionnant le plus lent. Une fois que vous avez vos mains sur les déclarations lentes, utilisez Explique plan pour voir ce que le moteur de base de données tente de faire, utilisez toutes les fonctionnalités qui suggèrent des indices et envisagent d'autres stratégies - telles que la dénormalisation - si ces deux options ne résolvent pas le goulot d'étranglement. .

fuite de mémoire

Activez la coloration de la collecte des ordures verbeuses et un port de surveillance JMX. Utilisez ensuite JConsole, qui fournit de nombreux graphiques, d'observer les tendances. En particulier, des fuites apparaissent généralement comme remplissant les anciens espaces de Gen ou Perm Gal. Les fuites sont un goulot d'étranglement avec la JVM consacre des quantités croissantes de temps à tenter une collection de déchets sans succès jusqu'à ce qu'une erreur OOM soit lancée.

Perm Gen implique la nécessité d'augmenter l'espace en tant que paramètre de ligne de commande à la JVM. Bien que l'ancien général implique une fuite où vous devriez arrêter le test de charge, générer un vidage de tas, puis utiliser l'outil d'analyse de la mémoire Eclipse pour identifier la fuite.

algorithme lent

Ceci est plus difficile à suivre. Les délinquants les plus fréquents sont la synchronisation, la communication entre les processus (par exemple RMI, les services Web) et les E / S du disque. Un autre problème courant est le code utilisant des boucles imbriquées (regardez MOM MOM O (N ^ 2) Performance!).

Le meilleur moyen que j'ai trouvé de trouver ces problèmes absents d'une connaissance plus approfondie consiste à générer des traces de pile. Celles-ci indiqueront ce que tous les threads font à un moment donné. Ce que vous cherchez sont des threads bloqués ou plusieurs threads accédant à tous les mêmes code. Cela pointe généralement à une certaine lenteur dans le codeBase.


0 commentaires

0
votes

J'ai blogué, la façon dont j'ai procédé avec le test de performance:

  1. Assurez-vous que le serveur (le matériel peut être conformément aux exigences de mise en scène / de production) n'a aucune autre installation pouvant affecter les performances.
  2. Pour la configuration des utilisateurs de DB, une procédure peut être utilisée et peut être appelée dans le cadre du plan de test JMeter.
  3. Installez JMeter sur une machine distincte, de sorte que JMeter n'affecte pas les performances.
  4. Créez un plan de test dans JMeter (comme indiqué dans la figure 1) pour tous les URI, avec des demandes de vérification de la réponse et de minuterie.
  5. Prenez le repère initial, en utilisant JMeter.
  6. Vérifiez les uri de faible performance. Ce sont les points à attendre des goulots d'étranglement.
  7. Essayez des différentes options d'amélioration de la performance, mais concentrez-vous sur un seul goulot d'étranglement à la fois.
  8. Essayez n'importe quel correctif de l'étape 6, puis faites une référence. S'il y a une amélioration commettre les modifications et la répétition de l'étape 5. Sinon, revenez et essayez de toute autre option à partir de l'étape 6.
  9. La prochaine étape consisterait à utiliser l'équilibrage de la charge, la mise à l'échelle matérielle, le clustering, etc. Ceci peut inclure une configuration physique et un coût matériel / logiciel. Donnez les résultats avec les options d'évolutivité.

    Pour une explication détaillée: http: // www. daemonthread.com/2011/06/site-Performance-tuning-utilisateur-jmeter.html


1 commentaires

Le lien est cassé



0
votes

J'ai commencé à utiliser plugins JMeter .
Cela me permet de recueillir des mesures d'application disponibles sur JMX à utiliser dans mon test de charge.


0 commentaires