我有这个有趣的问题,我无法确定问题。
我有这个“简单”的akka应用程序。它的主要目标是遍历数据库中的每个文档。我的主要actor向一个与数据库通信的actor请求行。检索到的每个文档都将返回给我的主要演员。通过批处理,这些文档将添加到由平衡调度程序管理的消息队列中。小工人会检查它们并对它们进行分类。
几个小时后,通常在2到4之间,所有演员同时停止,最多间隔5秒。
我想知道你们中是否有人见过类似的东西。
有关信息:
感谢您的帮助
从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
}
}
}
答案 0 :(得分:1)
我首先使用jconsole或jvisualvm等分析工具来检查内存,GC和/或fork + join问题。你有足够的堆分配吗?还记录线程数和线程状态(当发生减速时是否有分叉或连接的线程?)
可能需要在Akka的线程池中配置更多线程。或者你已经达到100个实例的上限并且它们都很忙。您可以继承DefaultResizer实现,以提供resizer活动的显式通知/日志记录,并将子类配置为resizer。