为什么行动迟缓?

Why is action delayed?

我使用 Gatling 模拟将 http 请求与简单的自定义操作相结合。我看到一个问题,偶尔应该立即执行的两个连续操作之间有很长(60 秒)的延迟:

.exec(s => {
    System.out.printf(/* logging time here */);
    s
  })
.exec(/* my custom action */)

并且我在自定义操作的 Chainable.execute() 中记录了时间戳。这主要是可行的,但有些执行会无缘无故地延迟(并且自定义操作失败,因为它必须在前面的操作后不到一分钟内完成)。

由于我是演员的新手,有没有什么办法可以调试挂起下一个动作继续的消息在哪里?我认为应该在同一个线程中立即执行后续操作(因为没有任何东西应该阻止它),但这似乎不是真的。

延迟期间系统不卡顿;其他动作同时执行,CPU没有被充分利用

闻起来像阻塞代码,请检查您的线程。不,您无法保证同一线程用于连续操作。

如果您的 Action 实现中有一个阻塞调用,您实际上是在阻塞 Akka 线程之一,因此您最终会遇到线程饥饿,您的工作流现在可以继续进行,直到某些线程再次可用。

不要挡在那里。如果您使用的是阻塞 API(无论如何都是错误的),请委托给专用线程池。