了解dropwizard指标

问题描述 投票:0回答:1

我正在对我的应用程序进行一些性能测试,并且在某些时候应用程序停止响应。检查http://localhost:7771/threads的线程日志,我发现了以下数据:

"org.eclipse.jetty.util.thread.QueuedThreadPool.dw.utilization" : {
  "value" : 1.0
},

这是否意味着我的应用程序过载了?

还有一些关于线程的有趣数字:

"jvm.threads.blocked.count" : {
  "value" : 0
},
"jvm.threads.count" : {
  "value" : 152
},
"jvm.threads.daemon.count" : {
  "value" : 12
},
"jvm.threads.deadlock.count" : {
  "value" : 0
},
"jvm.threads.deadlocks" : {
  "value" : [ ]
},
"jvm.threads.new.count" : {
  "value" : 0.
},
"jvm.threads.runnable.count" : {
  "value" : 11
},
"jvm.threads.terminated.count" : {
  "value" : 0
},
"jvm.threads.timed_waiting.count" : {
  "value" : 9
},
"jvm.threads.waiting.count" : {
  "value" : 132
}

等待线程的数量与总线程数几乎相同。

那么我应该使用哪个“指标”来确定是否存在阻塞线程的内容?

multithreading profiling dropwizard
1个回答
1
投票

java.lang.management.ThreadMXBean接口负责收集线程的所有度量标准,它只是用于管理JVM中所有Java线程的接口。

Dropwizard只是它的一个包装器,它的ThreadStatesGaugeSet类提供了一种使用ThreadMXBean公开的API返回不同状态的线程计数的方法。

因为在你的情况下,jvm.threads.blocked.count是0,所以没有线程被阻塞,但是,你有很高的jvm.threads.waiting.count指标值,这是因为java doc主要是由于Object引起的.wait,Thread.join或locksupport.park方法。以下是JAVA API文档的链接,可以提供有关它的详细信息。此外,一些JVM线程(如finalize,Reference Handler等)也将处于等待状态。因此,上面的等待计数是应用程序+ JVM线程。 https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html

在上面的场景中,我们可以看到有11个可运行的线程,这意味着尝试查看您的操作系统配置以及这些运行线程正在采用的OS资源量。他们是否长期运行线程?如果它没有长时间运行,那么下一个度量标准应该反映它(默认情况下,它在Dropwizard中每隔1分钟发出一次,但可以根据应用程序的需要配置为具有任何值)。分析线程转储也会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.