java - JavaMelody 和 ab 中的 tomcat 性能监控

标签 java tomcat docker apachebench java-melody

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

我的应用程序设置: 4 个由 docker-compose 设置的 docker 容器:myapplication(tomcat、jersey 应用程序)、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 会给出有关我的应用程序或仅 docker 容器的 CPU 和内存使用情况的准确结果吗?

2、我的机器有8个核,是不是% System CPU 93.36意味着有多少个y 应用 使用了 所有 8 核 CPU 资源的 93.36%? 我用了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 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. 两者:对于应用程序和操作系统
  2. 系统 CPU 是操作系统的 %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 个线程处于 Activity 状态,前段时间最多 681 个处于 Activity 状态,自启动 Tomcat 以来已启动 1182 个线程
  6. 我怀疑您能否同时使用 200 个线程和 8 个内核。可能没有足够的内核。一般来说,要有 200 个线程处于 Activity 状态并且不等待数据库或其他东西,理论上您需要 200 个内核。在你的情况下,要么你的服务器足够快,发送响应的速度比 ab 可以抛出的速度快,要么 ab 和线程之间有其他东西会减慢线程分配(我认为 93% 的 cpu 可能是原因)。
  7. CPU 似乎已经饱和,200 个 ab 线程可能太多了,所以出现一些故障是正常的。

关于java - JavaMelody 和 ab 中的 tomcat 性能监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49032883/

相关文章:

java - 不是评估加倍

java - 部署 servlet 时出错( Jersey )

带有 .bin 扩展名的 Java JDK

java - Tomcat 线程就绪

java - 使用 jetty 创建 bean 时出错

docker - 我应该在哪里设置 Mac OS 上的 '--insecure-registry' 标志?

spring-boot - 如何防止访问已安装的 secret 文件?

unix - Docker - 无法远程登录链接的容器

java - 订阅 Spring Metrics channel

java - 固定强化扫描区域设置更改重新出现