1

我们有一个 Java 应用程序,我们基本上使用三个调度程序池来处理处理任务:

  1. 将传入消息(来自 RabbitMQ 队列)转换为另一种格式
  2. 序列化消息
  3. 将序列化消息推送到另一个 RabbitMQ 服务器

我们不知道如何开始修复它的问题是,我们在第一个问题上存在延迟。换句话说,当我们测量从“tell”到actor开始转换之间的时间时,(不总是,但经常)有高达500ms的延迟。特别奇怪的是,CPU 利用率严重不足(10-15%),邮箱几乎一直是空的,没有大量消息等待处理。我们的理解是 Akka 通常会比这更好地利用 CPU?

转换是非阻塞的,不需要 I/O。大约有。200 个参与者在该调度程序上运行,该调度程序配置为吞吐量 2 并具有 8 个线程。

系统本身有 16 个 CPU,运行着大约 400 多个线程,当然大部分是被动的。

有趣的是,其他步骤没有看到这样的延迟,但这可能可以解释为第一步已经“传播”了消息,以便其他步骤/池可以轻松消化它们。

有谁知道什么会导致这种延迟和 CPU 利用率不足,以及您通常如何改进那里的东西?

4

0 回答 0