surveillance des performances tomcat dans JavaMelody et ab


Je suis nouveau dans JavaMelody et benchmark. J'utilise JavaMelody pour surveiller mon application Jersey dans tomcat après https://dzone.com/articles/a-step-by-step-guide-to-tomcat-performance-monitor.

Configuration de mon application: 4 conteneurs docker configurés par docker-compose: myapplication (tomcat, application jersey), kafka, postgres, zookeeper.

J'ai obtenu les détails suivants de la page de surveillance javaMelody:

Host:   [email protected]
Java memory used:   784 Mb / 7,124 Mb       ++++++++++++
Nb of http sessions:    0   
Nb of active threads
(current http requests):    9   
Nb of active jdbc connections:  0   
Nb of used jdbc connections
(opened if no datasource):  0
System load 27.89   
% System CPU    93.36       ++++++++++++

##############
# Details
##############

OS:     OS Linux, 4.11.0-32-generic , amd64/64 (8 cores)
Java:   OpenJDK Runtime Environment, 1.8.0
JVM:    OpenJDK 64-Bit Server VM
PID of process:     1
Nb of opened files  418 / 1,048,576    ++++++++++++
Server:     Server Apache Tomcat/8.0.50
Webapp context:     /event-bus
Start:  2/28/18 2:47 PM
JVM arguments:  -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djdk.tls.ephemeralDHKeySize=2048
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999
-Dignore.endorsed.dirs=
-Dcatalina.base=/usr/local/tomcat
-Dcatalina.home=/usr/local/tomcat
-Djava.io.tmpdir=/usr/local/tomcat/temp
Mean age of http sessions (min):    -1
Tomcat "http-apr-8080":     Busy threads = 17 / 200     ++++++++++++
Bytes received = 65,071,259
Bytes sent = 4,411,314
Request count = 538,335
Error count = 19,253
Sum of processing times (ms) = 17,998,558
Max processing time (ms) = 3,161
Memory:     Non heap memory = 99 Mb (Perm Gen, Code Cache),
Buffered memory = 33 Mb,
Loaded classes = 9,535,
Garbage collection time = 1,420 ms,
Process cpu time = 854,410 ms,
Committed virtual memory = 14,718 Mb,
Free physical memory = 21,865 Mb,
Total physical memory = 32,052 Mb,
Free swap space = 32,651 Mb,
Total swap space = 32,651 Mb
Free disk space:    408,262 Mb
Dependencies:   Dependencies Dependencies     View Maven's pom View Maven's pom
Threads Threads
Threads on [email protected]: Number = 624, Maximum = 681, Total started = 1,182

J'en ai questions:

1, j'ai configuré 4 conteneurs docker et tomcat s'exécute dans l'un d'eux. JavaMelody donne-t-il des résultats précis sur l'utilisation du PROCESSEUR et de la mémoire de mon application ou simplement des conteneurs docker?

2, Il y a 8 cœurs dans ma machine, % System CPU 93.36 signifie-t-il my application utilisé 93,36% des 8 cœurs de ressources CPU? J'ai utilisé docker stats <docker id> et obtenu CPU % de mon application est d'environ 336%. Je suis confus.

3, que signifie system load?

4, que signifie {[5] } dans Java memory used: 784 Mb / 7,124 Mb ++++++++++++?

5, Dans Tomcat "http-apr-8080": Busy threads = 17 / 200 ++++++++++++ et Threads on [email protected]: Number = 624, Maximum = 681, Total started = 1,182.

17/200 signifie-t-il que le nombre maximum de threads pour accepter les connexions est de 200, mais seulement 17 sont utilisés. mais que signifie Number = 624, Maximum = 681, Total started = 1,182?

6, j'ai utilisé ab pour envoyer 20000 demandes en 200 simultanéité. Mais pourquoi seulement 17/200 utilisé? Comment faire 200/200?

7, d'après le rapport de l'ab, j'ai trouvé 1,3% de demandes échouées. Cela signifie-t-il que je configure trop de concurrence dans le test ab? Ou cela signifie-t-il que tomcat ne peut pas gérer toutes les requêtes (mais seulement 17/200 utilisé dans tomcat)?

Merci.

Author: BAE, 2018-02-28

1 answers

  1. Les deux: pour l'application et pour le système d'exploitation
  2. System CPU est le %CPU du système d'exploitation. Et 93% est 93% de tous les cœurs pour la dernière minute (100% est le maximum). 336% est probablement pour les dernières secondes seulement.
  3. La charge du système signifie la moyenne de charge du système d'exploitation.
  4. Cela signifie la taille maximale du tas (comme dans Xmx).
  5. Oui, cela signifie que le maximum de threads http est 200, mais seulement 17 sont utilisés. Mais 17 threads http utilisés sont déjà assez élevés pour un application avec 8 noyaux, d'une manière générale. Theads on ...: Number = 624, Maximum = 681, Total started = 1,182 signifie que 624 threads sont vivants, 681 étaient vivants au maximum il y a quelque temps, 1182 threads ont été démarrés depuis le démarrage de Tomcat
  6. Je doute que vous puissiez avoir 200 threads utilisés simultanément avec 8 cœurs. Il n'y a probablement pas assez de cœurs pour cela. D'une manière générale, pour avoir 200 threads actifs et ne pas attendre la base de données ou autre chose, vous auriez théoriquement besoin de 200 cœurs. Dans votre cas, votre serveur est assez rapide pour envoyer des réponses plus rapides qu'ab peuvent y être lancées ou il y a autre chose entre ab et les threads qui ralentit les allocations de threads (je pense que le cpu à 93% peut en être la cause).
  7. Le processeur semble saturé et 200 threads ab sont probablement trop, il est donc normal d'avoir des échecs.
 0
Author: evernat, 2018-05-02 12:52:47