我的 Playframework 应用程序有时没有响应,我想在运行时检测到这一点 + 记录有关当前在耗尽的执行上下文上运行的内容的信息。
实现这一目标的最佳策略是什么?我考虑过将小型可运行对象发布到执行上下文,如果它们没有及时执行,我会记录一条警告。这个最长等待时间当然应该是可配置的。例如,主 Web 执行上下文的阻塞时间不应超过 1 秒,但后台数据库执行上下文可能允许阻塞 30 秒。
以前一定有人这样做过吗?
相关信息:http://www.playframework.com/documentation/2.2.x/ThreadPools http://www.playframework.com/documentation/2.2.x/ThreadPools
这是一个很难回答的问题。
调度程序的配置实际上取决于参与者正在执行的工作类型。
也许你应该看看那些产生 future 来完成他们工作的演员。在配置文件中预定义执行上下文并像这样使用它们可能是一个好主意:
implicit val ec : ExecutionContext = context.system.dispatchers.lookup("someDispatcher")
这些演员很可能会造成饥饿效应。
您想要实现的效果是确保消息得到快速处理,并且长时间运行的任务不会影响它们,因此分离是这里的关键。
监控应用程序的一个好工具是类型安全控制台。您可以查看那里的调度程序,发现处理消息的延迟增加了。
另一个问题是识别进行网络 I/O 等高风险工作的参与者。如果线程发生问题,导致池中的线程不再可用,则会产生问题。
如果不尝试线程池大小,您很可能不知道什么是最适合您的设置。
我写的大部分建议都是从书中知道的Effective Akka by Jamie Allen
他们似乎对我来说工作得很好。
这本书里有一节Fixing Starvation
。您可能想仔细看看它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)