我有一个通过
ScheduledExecutorService
实现的 java 线程池。该池处理不同的作业,我希望在 NewRelic 中拥有指标,以深入了解服务的多个实例中每个作业类型(或线程名称)的线程池利用率。
我特别想测量以下信息:
使用 NR Java 代理来衡量这一点(以便在 NR 中构建图表)的最佳方法是什么?或者,是否有任何可观察性工具可以集成到服务中(NR 兼容)来帮助我开箱即用地进行测量?该服务不使用任何特定的 Java 框架(例如 Spring)。
提前感谢您的任何提示。
New Relic Java 代理不会立即从 ScheduledExecutorService 中提取数据。
代理默认会捕获线程数据。如果您的线程已命名,您可以在 APM 页面的“线程”选项卡中查看线程计数。请注意,数字会转换为“#”。
要获得平均执行速度,您必须使用 Java 代理 API。
最简单的方法是将注释
@Trace(dispatcher=true)
添加到处理每种作业类型的每个方法。如果同一个方法处理多个作业类型,连同注释,您可以在方法内使用 NewRelic.setTransactionName(jobType.toString())
命名事务。
现在来说说内存,它在 JVM 中不容易检索。最好的选择是 JFR,它提供按线程分配。如果您打开“实时分析”,Java 代理可以捕获该信息。但请注意,它具有很高的分配开销,并且会增加摄取量。