我正在努力使用自定义 JFR 事件对异步 servlet 请求处理进行建模。我面临的挑战是,在异步处理中,一个请求可能会被#dispatch()
编辑多次。这意味着整个请求处理链可能会被执行多次,有时会在不同的线程中执行。如何使用自定义 JFR 事件对此进行建模?
对我有帮助的是“父”事件的概念(可能在不同的线程中)或事件的暂停和恢复。
编辑
稍微说明一下这个问题。处理异步请求可能需要 100 秒的挂钟时间。然而,在一个方法中,实际处理可能仅在 4 秒的用户时间内发生Servlet#service()
:
- 线程A中的第二个0-1,
Servlet#service()
方法返回,AsyncContext
开始 - 线程 B 中的第二个 10-11,
Servlet#service()
方法返回,AsyncContext
开始 - 线程 A 中的第二个 80-81,
Servlet#service()
方法返回,AsyncContext
开始 - 线程 C 中的第二个 99-100,
Servlet#service()
方法返回
我只对在这三个线程中为这四个持续时间生成事件感兴趣,然后将它们与单个请求相关联。