6

我的 Playframework 应用程序不时出现响应问题,我想在运行时检测到这一点 + 记录有关当前在耗尽的执行上下文中运行的内容的信息。

实现这一目标的最佳策略是什么?我考虑过将小型可运行文件发布到执行上下文中,如果它们没有及时执行,我会记录一个警告。这个最大等待时间当然应该是可配置的。例如,主 web 执行上下文不应该被阻塞超过 1 秒,但后台数据库执行上下文可能允许 30 秒的阻塞。

以前一定有人这样做过?

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

4

1 回答 1

2

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

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

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

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

这些行为者很可能会造成饥饿效应。

您想要达到的效果是确保消息被快速处理并且长时间运行的任务不会影响它们,因此分离是这里的关键。

监控应用程序的一个好工具是Typesafe Console。您可以查看那里的调度程序,发现处理消息的延迟增加了。

另一个问题是识别像网络 I/O 这样的高风险工作的参与者。如果线程出现问题,使池中不再可用,则会产生问题。

如果不尝试线程池大小,您很可能不知道什么是最适合您的设置。

我写的大部分建议都是从书中知道的Effective Akka by Jamie Allen,它们似乎对我很有效。本书中有一节Fixing Starvation。你可能想仔细看看。

于 2014-04-04T09:41:45.320 回答