在 Newrelic 中为 Java 线程池(执行器)创建指标

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

我有一个通过

ScheduledExecutorService
实现的 java 线程池。该池处理不同的作业,我希望在 NewRelic 中拥有指标,以深入了解服务的多个实例中每个作业类型(或线程名称)的线程池利用率。

我特别想测量以下信息:

  • 每种作业类型的线程数
  • 每个作业类型的内存分配
  • 每种作业类型的平均执行时间

使用 NR Java 代理来衡量这一点(以便在 NR 中构建图表)的最佳方法是什么?或者,是否有任何可观察性工具可以集成到服务中(NR 兼容)来帮助我开箱即用地进行测量?该服务不使用任何特定的 Java 框架(例如 Spring)。

提前感谢您的任何提示。

metrics executorservice newrelic threadpoolexecutor observability
1个回答
0
投票

New Relic Java 代理不会立即从 ScheduledExecutorService 中提取数据。

代理默认会捕获线程数据。如果您的线程已命名,您可以在 APM 页面的“线程”选项卡中查看线程计数。请注意,数字会转换为“#”。

要获得平均执行速度,您必须使用 Java 代理 API

最简单的方法是将注释

@Trace(dispatcher=true)
添加到处理每种作业类型的每个方法。如果同一个方法处理多个作业类型,连同注释,您可以在方法内使用
NewRelic.setTransactionName(jobType.toString())
命名事务。

现在来说说内存,它在 JVM 中不容易检索。最好的选择是 JFR,它提供按线程分配。如果您打开“实时分析”,Java 代理可以捕获该信息。但请注意,它具有很高的分配开销,并且会增加摄取量。

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