阿卡的消息一下子就停止了

时间:2013-08-22 17:18:50

标签: scala akka

我有这个有趣的问题,我无法确定问题。

我有这个“简单”的akka​​应用程序。它的主要目标是遍历数据库中的每个文档。我的主要actor向一个与数据库通信的actor请求行。检索到的每个文档都将返回给我的主要演员。通过批处理,这些文档将添加到由平衡调度程序管理的消息队列中。小工人会检查它们并对它们进行分类。

几个小时后,通常在2到4之间,所有演员同时停止,最多间隔5秒。

我想知道你们中是否有人见过类似的东西。

有关信息:

  • 我使用AkkA 2.2.0
  • 不使用任何问题消息,只告诉
  • 我不使用任何线程锁定方法,如Await
  • DeadLetters是我知道一切都关闭的原因

感谢您的帮助


从DeadLetters看来,只有与我的平衡调度员/我的循环路由器相关的演员才会停止。会不会有我错过的东西?

我的scala

val workers: ActorRef = context.system.actorOf(
  Props(new WorkerActor)
    .withRouter(FromConfig())
    .withDispatcher("balancing-dispatcher"),
  "round-robin"
)

我的配置代码

balancing-dispatcher {
  type = BalancingDispatcher
  executor = "fork-join-executor"
}

akka.actor.deployment {
  /round-robin {
    router = round-robin
    nr-of-instances = 50
    resizer {
      lower-bound = 10
      upper-bound = 100
    }
  }
}

1 个答案:

答案 0 :(得分:1)

我首先使用jconsole或jvisualvm等分析工具来检查内存,GC和/或fork + join问题。你有足够的堆分配吗?还记录线程数和线程状态(当发生减速时是否有分叉或连接的线程?)

可能需要在Akka的线程池中配置更多线程。或者你已经达到100个实例的上限并且它们都很忙。您可以继承DefaultResizer实现,以提供resizer活动的显式通知/日志记录,并将子类配置为resizer。