CPU 利用率不足的消息延迟

问题描述

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

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

我们不知道如何开始修复它的问题是,我们在第一个时有延迟。换句话说,当我们测量“告诉”和开始执行演员之间的转换之间的时间时,(不总是,但经常)有高达 500 毫秒的延迟。尤其奇怪的是,cpu 利用率严重不足(10-15%),邮箱几乎一直都是空的,没有大量消息等待处理。我们的理解是,Akka 通常会比这更好地利用 cpu

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

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

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

有没有人知道是什么导致了这种延迟和 cpu 利用率不足以及您通常如何改进那里的事情?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)