web-dev-qa-db-fra.com

JMeter OutOfMemoryError

Je fais face à des erreurs OutOfMemor et JMeter cesse de fonctionner ....

Java.lang.OutOfMemoryError: Java heap space Dumping heap to
    Java_pid4412.hprof ... Heap dump file created [591747609 bytes in
    71.244 secs] Exception in thread "AWT-EventQueue-0" Java.lang.OutOfMemoryError: Java heap space Exception in thread
    "AWT-EventQueue-0" Java.lang.OutOfMemoryError: Java heap space
    Exception in thread "AWT-EventQueue-0" Java.lang.OutOfMemoryError:
    Java heap space Exception in thread "AWT-EventQueue-0"
    Java.lang.OutOfMemoryError: Java heap space

Comment peut-il être résolu?
Mon système a de très bonnes spécifications comme 16 Go de RAM, 2x processeurs Quad Core, avec un disque dur de 146 Go.

Quelqu'un peut-il m'aider?

16
james

Votre vidage de tas indique que vous utilisez les paramètres JMeter par défaut de 512 Mo . Ainsi, même si vous avez 16 Go, vous ne les utilisez pas.

Remplacez la machine virtuelle Java par défaut dans jmeter.bat par la taille appropriée:

set HEAP=-server -Xms768m -Xmx768m -Xss128k 

set NEW=-XX:NewSize=1024m -XX:MaxNewSize=1024m

Regardez aussi:

15
ChamaraS

Combien de mémoire avez-vous allouée à la machine virtuelle Java? Quelque part autour de 512 Mo?

La configuration est 

Java -Xms<initial heap size> -Xmx<maximum heap size>
15
Aleksi Yrttiaho

Pour optimiser OutOfMemoryError, procédez comme suit:

  • Augmenter la taille du segment de mémoire Java:

JMeter est un outil Java fonctionnant avec JVM. Pour obtenir une capacité maximale, nous devons fournir un maximum de ressources à JMeter pendant l'exécution. Tout d'abord, nous devons augmenter la taille de tas (dans le répertoire bin de JMeter, nous obtenons jmeter.bat/sh).

HEAP=-Xms512m –Xmx512m

Cela signifie que la taille de segment allouée par défaut est d'au moins 512 Mo, d'au plus 512 Mo. Configurez-le selon votre configuration de machine own. Il faut également garder à l'esprit que le système d'exploitation a également besoin d'une certaine quantité de mémoire, de sorte que tout le matériel RAM physique ne devrait pas être alloué.

  • Exécuter des tests en mode non-graphique:

JMeter est une application Java GUI. Il possède également l'édition non graphique qui nécessite beaucoup de ressources (CPU/RAM). Si nous exécutons Jmeter en mode non-graphique, cela consommera less resource et nous pourrons exécuter plus de thread.

  • Désactiver TOUS les auditeurs pendant le test. Ils sont uniquement destinés au débogage et servent à concevoir le script souhaité.

Les écouteurs doivent être désactivés pendant les tests de charge. Leur activation génère des frais généraux supplémentaires, qui consomment des ressources précieuses, nécessaires à des éléments plus importants de votre test.

  • Utiliser un logiciel à jour:

Java et JMeter doivent être tenus à jour.

  • Décidez quelles métriques vous devez stocker:

Lorsqu'il s'agit de stocker des requêtes et des en-têtes de réponse, les résultats d'assertion et les données de réponse peuvent consommer beaucoup de mémoire! Il est donc sage de ne pas stocker ces valeurs sur JMeter sauf si cela est absolument nécessaire.

  • Tweak JVM:

Les arguments JVM suivants des scripts de démarrage JMeter peuvent également être ajoutés ou modifiés:

1. Ajouter le taux d'allocation de mémoire:

NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

Cela signifie que la mémoire sera augmentée à ce rythme.

2.-server - ceci fait passer la machine virtuelle Java en mode "serveur" avec l'optimisation des paramètres d'exécution. Dans ce mode, JMeter démarre plus lentement, mais le débit global sera plus élevé.

3.-d64 - Lors de l'utilisation d'un système d'exploitation 64 bits, l'utilisation de ce paramètre peut indiquer explicitement à JVM de s'exécuter en mode 64 bits.

4.-XX:+UseConcMarkSweepGC - ceci force l'utilisation du récupérateur de place CMS. Cela réduira le débit global, mais aboutira à des collectes de mémoire très gourmandes en ressources processeur.

5.-XX:+DisableExplicitGC - empêche les applications de forcer des récupérations de mémoire coûteuses et évite les pauses inattendues.

Pour une compréhension meilleure et plus élaborée, ce blog à propos de 9 solutions simples pour un échec de test de charge JMeter «Mémoire insuffisante» est utile.

8
Adnan

J'ai également eu ce problème et peu importait combien j'avais ajusté la configuration Java -Xms<initial heap size> -Xmx<maximum heap size>, car je manquais toujours de mémoire. En fin de compte, j'ai découvert que l'exécution de JMeter en mode graphique (en particulier avec les écouteurs) provoque un goulot d'étranglement. La meilleure façon d'utiliser JMeter, en particulier pour les tests étendus ou l'exécution de plusieurs serveurs esclaves, est en mode non graphique, qui ressemble à ceci:

jmeter -n -t testplan.jmx -r

Consultez ce lien et lisez comment tester à distance de la bonne manière: http://wiki.Apache.org/jmeter/JMeterFAQ#How_to_do_remote_testing_the_.27proper_way.27.3F . Lisez la section sur le test à distance de la "manière appropriée".

J'espère que cela t'aides.

5
user1714830

Vous devriez vérifier si vous n'utilisez pas d'écouteur de résultats d'arborescence lors de vos tests avec de nombreux utilisateurs.

Vérifiez les meilleures pratiques de jmeter pour éviter ce genre de problème.

Cordialement

4
user1565007

Vous devez modifier HEAP SIZE dans le fichier jmeter.bat. Vous devez d’abord convertir la taille en Mo de 2 Go ou 6 Go (OU la taille de votre choix), puis enregistrez-la et relancez le fichier .bat.

Définir la valeur pour "set HEAP = - Xms512m -Xmx512m

2
Sohil Shivani

Dans la version 3.x de Jmeter, il est mentionné dans $ JMETER_HOME/bin/jemter.sh (jmeter.bat):

## Variables d'environnement:
## JVM_ARGS - arguments Java facultatifs, par exemple. -Dprop = val
## par exemple.
## JVM_ARGS = "- Xms512m -Xmx512m" jmeter.sh etc.

ainsi, dans votre cas, vous pouvez le définir autant que suffisant pour vos besoins, par exemple:

JVM_ARGS="-Xms1024m -Xmx1024m"
2
Kayvan Tehrani

Exécutez Jmeter en mode non graphique. Augmentez la taille de la mémoire. Ajouter très peu/pas d'écouteurs . Pour exécuter Jmeter en mode non-graphique, allez dans le répertoire bin et ouvrez Invite de commandes dans cette fenêtre. utilisez la commande suivante "jmeter.bat -n -t Test.jmx -l Test.csv" ici Test.jmx est le fichier de test que je dois ouvrir en mode non graphique et Test.csv est le fichier dans lequel j'ai besoin de mon résultats stockés . Pour augmenter la taille de la mémoire, utilisez la commande HEAP = "- Xms512m -Xmx2048m" ici 512 est la mémoire déjà allouée et 2048 est la mémoire que j'ai besoin d'allouer à Jmeter.

J'espère que cela t'aides

2
Nauman Malik

Bien que votre serveur dispose de 16 Go de RAM, la taille de segment par défaut de JMeter est de 512 Mo. Augmentez la taille de segment en procédant comme suit.

1. Open jmeter file using vi editor /text editor
2. Search for "HEAP"
3. Change minimum (-Xms) and Maximum (-Xmx) heap values as you required
4. Save and quit (!wq enter)  
5. Start Jmeter by sh jmeter.sh or bash jmeter.bat or Java -jar ApacheJMeter.jar
2
Madhu Cheepati

Ajustez la taille du segment de mémoire comme indiqué dans les autres réponses et prenez également en compte certaines des meilleures pratiques.

  • Lors de l'exécution d'un test (pas lors de la validation bien sûr), utilisez le mode non-gui
  • Désactivez tout écouteur lourd tel que Voir l'arborescence des résultats, mais utilisez plutôt un Simple Data Writer et analysez ensuite vos données.

Ces 2 éléments vont déjà augmenter considérablement vos performances et votre utilisation de la taille de tas

0
Dirk R.