мониторинг производительности tomcat в JavaMelody и ab

Я новичок в JavaMelody и тесте. Я использую JavaMelody для мониторинга моего приложения Джерси в tomcat после https://dzone.com/articles/a-step-by-step-guide-to-tomcat-performance-monitor.

Настройка моего приложения: установка 4 контейнеров докеров с помощью docker-compose: myapplication (tomcat, трикотажное приложение), kafka, postgres, zookeeper.

Я получил следующие данные со страницы мониторинга 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

У меня есть несколько вопросов:

1, я устанавливаю 4 док-контейнера, и в одном из них работает tomcat. Предоставляет ли JavaMelody точные результаты по использованию ЦП и памяти моим приложением или только контейнерами докеров?

2. На моей машине 8 ядер. % System CPU 93.36 Означает ли это, что мое приложение использовало 93,36% всех 8-ядерных ресурсов ЦП? Я использовал docker stats <docker id> и получил CPU % моего приложения около 336%. Я запутался.

3, что означает system load?

4, что означает 7124 Mb в Java memory used: 784 Mb / 7,124 Mb ++++++++++++?

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

Означает ли 17/200, что максимальное количество потоков для приема соединений равно 200, но используется только 17. но что означает Number = 624, Maximum = 681, Total started = 1,182?

6, я использовал ab для отправки 20000 запросов в 200 параллелизма. Но почему используется только 17/200? Как сделать 200/200?

7, из отчета ab, я нашел 1,3% неудачных запросов. Означает ли это, что я настроил слишком много параллелизма в тесте ab? Или это означает, что tomcat не может обрабатывать все запросы (но только 17/200, используемые в tomcat)?

Спасибо.


person BAE    schedule 28.02.2018    source источник


Ответы (1)


  1. И для приложения, и для операционной системы
  2. Системный ЦП — это % ЦП для ОС. А 93% — это 93% всех ядер за последнюю минуту (100% — это максимум). 336% наверное только для последних секунд.
  3. Под нагрузкой системы понимается средняя нагрузка ОС.
  4. Это означает максимальный размер кучи (как в Xmx).
  5. Да, это означает, что максимальное количество потоков HTTP равно 200, но используется только 17. Но 17 используемых http-потоков — это уже довольно много для приложения с 8 ядрами, вообще говоря. Theads on ...: Number = 624, Maximum = 681, Total started = 1,182 означает, что 624 потока активны, максимум 681 был активен какое-то время назад, 1182 потока были запущены с момента запуска Tomcat
  6. Я сомневаюсь, что вы можете иметь 200 используемых потоков одновременно с 8 ядрами. Возможно, для этого недостаточно ядер. Вообще говоря, чтобы иметь 200 активных потоков и не ждать базы данных или чего-то еще, вам теоретически потребуется 200 ядер. В вашем случае либо ваш сервер достаточно быстр, чтобы отправлять ответы быстрее, чем ab может его выдать, либо между ab и потоками есть что-то еще, что замедляет распределение потоков (я думаю, что процессор на 93% может быть причиной этого).
  7. ЦП кажется перегруженным, и 200 потоков ab, вероятно, слишком много, поэтому некоторые сбои - это нормально.
person evernat    schedule 02.05.2018