JavaMelody和ab

时间:2018-02-28 15:17:31

标签: java tomcat docker apachebench java-melody

我是JavaMelody和基准测试新手。我正在使用JavaMelodyhttps://dzone.com/articles/a-step-by-step-guide-to-tomcat-performance-monitor之后的tomcat中监控我的Jersey应用程序。

我的应用程序设置: 4个docker容器由docker-compose设置:myapplication(tomcat,jersey application),kafka,postgres,zookeeper。

我从javaMelody监控页面获得了以下详细信息:

Host:   16a180e86bba@172.18.0.5
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 16a180e86bba@172.18.0.5: Number = 624, Maximum = 681, Total started = 1,182

我有一些问题:

1,我设置了4个docker容器,其中一个正在运行tomcat。 JavaMelody是否给出了应用程序的CPU和内存使用情况或仅仅是docker容器的准确结果?

2,我的机器中有8个核心,% System CPU 93.36是指 y应用程序使用所有8个核心CPU资源的93.36%? 我使用docker stats <docker id>并且我的应用程序CPU %约为336%。我很困惑。

3,system load是什么意思?

4,7124 MbJava memory used: 784 Mb / 7,124 Mb ++++++++++++中的含义是什么?

5,在Tomcat "http-apr-8080": Busy threads = 17 / 200 ++++++++++++Threads on 16a180e86bba@172.18.0.5: Number = 624, Maximum = 681, Total started = 1,182

17/200是否表示接受连接的最大线程数为200,但只使用了17。但是Number = 624, Maximum = 681, Total started = 1,182是什么意思?

6,我使用ab以200并发方式发送20000个请求。但为什么只使用17/200?如何制作200/200

7,从ab的报告中,我发现1.3%的请求失败。这是否意味着我在ab测试中设置了太多的并发性?或者这是否意味着tomcat无法处理所有请求(但tomcat中只使用了17/200)?

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 两者:用于应用程序和操作系统
  2. 系统CPU是OS的%CPU。 93%是最后一分钟内93%的核心(100%是最大值)。 336%可能只是最后一秒。
  3. 系统负载是指操作系统的load average
  4. 表示堆的最大大小(如Xmx中所示)。
  5. 是的,这意味着http线程的最大值为200,但只使用了17个。但是一般来说,对于具有8个内核的应用程序,已经使用了17个http线程。 Theads on ...: Number = 624, Maximum = 681, Total started = 1,182表示有624个线程处于活动状态,最近有681个处于活动状态,自启动Tomcat以来已启动了1182个线程
  6. 我怀疑你可以同时拥有200个使用过的线程和8个核心。可能没有足够的内核。一般来说,要激活200个线程并且不等待数据库或其他东西,理论上需要200个核心。在你的情况下,要么你的服务器足够快,发送响应的速度快于ab可以抛出响应,或者ab和线程之间还有其他东西会减慢线程分配(我认为cpu在93%可能是原因)。
  7. CPU似乎已经饱和,200个ab线程可能太多,所以有一些失败是正常的。