请考虑以下代码:
public class Job {
private final ExecutorService executorService;
public void process() {
executorService.submit(() -> {
// do something slow
}
}
}
我可以使用AppDynamics“Java POJO”规则来创建业务事务来跟踪对Job.process()方法的所有调用。但是,测量的响应时间并未反映java.util.concurrent.ExecutorService启动的异步线程的实际成本。 AppDynamics文档中也描述了这个确切的问题:End-to-End Latency Performance:
在测量响应时间方面,控制权的返回会停止交易的时钟,但同时交易的逻辑处理仍在继续。
同样的AppDynamics文档尝试提供解决此问题的解决方案,但它提供的说明对我来说不是很清楚。
有人可以提供更多关于如何配置AppD来跟踪上述异步调用的可执行指南吗?
答案 0 :(得分:0)
您似乎应该能够定义自定义的异步事务分界器,如下所述:
https://docs.appdynamics.com/display/PRO44/Asynchronous+Transaction+Demarcators
,它将指向您传递给执行程序的Runnable的最后一个方法。然后,根据文档,您需要做的就是将Demarcator附加到您的业务事务中,它将收集异步调用。