我的Playframework应用程序出现问题时不时没有响应,我想在运行时检测到这一点+关于当前在耗尽的执行环境中运行的内容的日志信息。
实施此策略的最佳策略是什么?我想过将小的runnables发布到执行上下文中,如果他们没有及时执行,我会记录一个警告。这个最大等待时间当然应该是可配置的。例如,主Web执行上下文永远不应被阻止超过1秒,但后台db执行上下文可能允许30秒阻塞。
之前有人必须这样做吗?
相关信息: http://www.playframework.com/documentation/2.2.x/ThreadPools
答案 0 :(得分:2)
这是一个很难回答的问题。
调度员的配置实际上取决于你的演员正在做的工作类型。
可能你应该看看产生未来的演员来做他们的工作。在配置文件中预定义执行上下文并使用它们可能是个好主意:
implicit val ec : ExecutionContext = context.system.dispatchers.lookup("someDispatcher")
这些演员可能会导致饥饿效应。
您希望实现的效果是确保快速处理消息,长时间运行的任务不会影响它们,因此分离是关键。
监控应用程序的一个好工具是 Typesafe控制台。您可以查看那里的调度程序,看看处理邮件的延迟会增加。
另一个问题是确定像网络I / O这样高风险工作的参与者。如果线程中的某些内容发生在池中不再可用,则会产生问题。
很有可能在没有试验线程池大小的情况下,你不会知道什么是最适合你的设置。
我写的大部分建议都是从Effective Akka by Jamie Allen
这本书中得知的,而且它们对我来说似乎很有效。
本书中有一节Fixing Starvation
。您可能希望更接近它。