Spring WebFlux 时不时会死机

rio*_*rio 5 reactive-programming spring-boot spring-webflux

我有一个Spring Boot WebFluxI/O 密集型服务并调用外部资源。

通常情况下,一切正常。但有时,我注意到该服务看起来像是冻结/冬眠。这意味着它可以在通常需要几毫秒的两行代码之间空闲几分钟。

这通常与 I/O 操作相关。例如,从资源 A 获取响应,然后调用资源 B。

我们注意到有时这些时间间隔为 10 分钟 - 就好像服务没有可用线程来处理请求或者它正在某处排队。

这种冻结可能与我们调用的外部服务响应缓慢有关。我们期望 WebFlux 能够毫无问题地处理它,但外部资源的缓慢似乎正在影响我们的服务。

伪正常场景:

10:00:00  - call external service A (responses within 2 seconds)
10:00:02 - getting a response from service A 
10:00:02:10 - calling service B  after 10 Milliseconds
Run Code Online (Sandbox Code Playgroud)

伪故障场景:

10:00  - call external service A (responses are getting slower, say to 1 minute)
10:01 - getting a response from service A
10:11 - calling service B  <----- why did it wait 10 minutes?
Run Code Online (Sandbox Code Playgroud)

当这个情况发生时:

  1. 对服务的请求数量适中且恒定(每秒约 40 个)
  2. CPU 较低 (~20-40%),并且没有尖峰。
  3. 线程数量从 ~100 增加到 ~150。

有什么想法会导致这样的事情吗?