Dim*_*ABC 5 java tomcat spring-boot
我们正在开发一款使用异构后端工具集的产品。REST API主要是Python,有时Python需要通过REST同步调用Java服务器。我们需要一些指标来帮助我们了解 Java 服务器是否过载,并且我们还需要一个 Java 容器。Java 进程的繁忙线程数或 CPU 利用率都不错,但我想看看请求在 Tomcat 线程池开始执行之前在 Tomcat 队列中停留了多长时间(如果有的话)。在涉及 RabbitMQ 的异步场景中,这些指标随 RabbitMQ 一起提供,但我谈论的是同步场景。
现在最有趣的部分开始了。我找不到一种方法来通知消息击中接受线程或被放入等待队列。我所能得到的只是在消息即将开始处理时通过扩展HandlerInterceptorAdapter
和实现preHandle
方法(我使用 Spring Boot)发出通知。我故意将工作线程数量减少到 1 个,并每两秒发送 3 个请求,在 REST 处理程序中休眠 10 秒。此测试表明,它HandlerInterceptorAdapter.preHandle
是在线程开始执行请求之前调用的,而不是在 Tomcat 将请求排队时调用,因为所有线程都忙。
这看起来很合乎逻辑,因为如果所有线程都忙,Tomcat 如何让我们知道请求已排队?通过执行我们提供的一些代码?如果所有线程都忙,在哪个线程的上下文中?我尝试过过滤器,但它也没有帮助解决相同的症状。它会在拦截器之前立即被发射。
是否可以在不向 HTTP 标头添加生成请求的时间的情况下实现我想要的目标?我不愿意这样做,因为在托管容器的机器上时间可能会被错误地设置,或者更糟糕的是,它可能会前后波动几秒钟。
归档时间: |
|
查看次数: |
670 次 |
最近记录: |