如何检测scala executioncontext耗尽?

时间:2014-04-01 13:38:38

标签: scala playframework threadpool akka executioncontext

我的Playframework应用程序出现问题时不时没有响应,我想在运行时检测到这一点+关于当前在耗尽的执行环境中运行的内容的日志信息。

实施此策略的最佳策略是什么?我想过将小的runnables发布到执行上下文中,如果他们没有及时执行,我会记录一个警告。这个最大等待时间当然应该是可配置的。例如,主Web执行上下文永远不应被阻止超过1秒,但后台db执行上下文可能允许30秒阻塞。

之前有人必须这样做吗?

相关信息: http://www.playframework.com/documentation/2.2.x/ThreadPools

1 个答案:

答案 0 :(得分:2)

这是一个很难回答的问题。

调度员的配置实际上取决于你的演员正在做的工作类型。

可能你应该看看产生未来的演员来做他们的工作。在配置文件中预定义执行上下文并使用它们可能是个好主意:

implicit val ec : ExecutionContext = context.system.dispatchers.lookup("someDispatcher")

这些演员可能会导致饥饿效应。

您希望实现的效果是确保快速处理消息,长时间运行的任务不会影响它们,因此分离是关键。

监控应用程序的一个好工具是 Typesafe控制台。您可以查看那里的调度程序,看看处理邮件的延迟会增加。

另一个问题是确定像网络I / O这样高风险工作的参与者。如果线程中的某些内容发生在池中不再可用,则会产生问题。

很有可能在没有试验线程池大小的情况下,你不会知道什么是最适合你的设置。

我写的大部分建议都是从Effective Akka by Jamie Allen这本书中得知的,而且它们对我来说似乎很有效。 本书中有一节Fixing Starvation。您可能希望更接近它。