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