java - 为什么延迟堆栈跟踪没有平均值?
问题描述
当我使用 Java Mission Control 打开一个 .jfr 文件(Java Flight Record)时,我可以在 Thread -> Latencies -> Latency Stack Traces 选项卡中找到“Stack Trace”、“Longest”和“Count”。我关心平均值,但不是最长的。Java Latencies 选项卡中有平均值,但它包含与事件类型相关的所有延迟。其中一些对我来说毫无意义,例如:
sun.misc.Unsafe.park(boolean, long)
295,569,155,245 436,427
java.util.concurrent.locks.LockSupport.park(Object)
295,569,155,245 344,030
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await()
295,569,155,245 263,418
java.util.concurrent.LinkedBlockingQueue.take()
63,773,776,315 257,531
java.util.concurrent.ThreadPoolExecutor.getTask()
63,773,776,315 257,511
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
63,773,776,315 257,511
java.util.concurrent.ThreadPoolExecutor$Worker.run()
63,773,776,315 257,511
java.lang.Thread.run()
63,773,776,315 257,511
以上是线程池的空闲时间,等待下一个任务。这个和所有其他混合的堆栈跟踪的平均值是没有意义的。我只关心业务堆栈跟踪的延迟。如何获得特定延迟堆栈跟踪的平均值。我可以将原始数据导出到csv,然后我可以自己计算。
解决方案
为了保持低开销,Flight Recorder 只记录异常值。例如。如果延迟的持续时间低于 20 毫秒,则不记录。
可以对延迟进行采样,以获得平均延迟的近似值,但截至今天(JDK 11)尚不可用。
推荐阅读
- android-studio - 尝试一次将用户信息输入到 2 个表 sql
- android - Android中可调整的“分享方式”
- laravel - Laravel 默认语言环境不在 url
- javascript - 如何在页面加载时自动聚焦文本表单字段但在移动设备上隐藏软键盘?
- log4net - 来自 Properties 的 Log4Net 参数,无需编程
- css - 保持元素相对于其宽度的高度
- android-intent - 意图 recyclerview 与 customAdapter 图像到其他活动
- java - 无法在 Tomcat7 上运行 Spring Boot 2.0:“由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext。”
- python - pygame组更新方法不起作用
- aem - 在 AEM 中解密时出现 CryptoException