Как AppDynamics 4.4 отслеживать асинхронные транзакции
Рассмотрим код ниже:
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: сквозная латентная производительность, которая:
Возврат управления останавливает часы транзакции с точки зрения измерения времени отклика, но при этом логическая обработка транзакции продолжается.
Тот же документ AppDynamics пытается дать решение для решения этой проблемы, но инструкции, которые он предоставляет, мне не очень понятны.
Может ли кто-нибудь дать более исполняемое руководство о том, как настроить AppD для отслеживания асинхронных вызовов, как показано выше?
1 ответ
Похоже, вы сможете определить свой собственный деминатор асинхронных транзакций, как описано в:
https://docs.appdynamics.com/display/PRO44/Asynchronous+Transaction+Demarcators
который будет указывать на последний метод Runnable, который вы передаете исполнителю. Затем, согласно документации, все, что вам нужно, это присоединить демаркатор к вашей бизнес-транзакции, и он будет собирать асинхронный вызов.