我目前有一个相当大的后端,它是使用Play框架(在后台使用akka HTTP)用Scala编写的,并使用许多参与者来安排任务,维护状态等。
每个小时随机出现“ ish”,我会收到以下消息:
安排的心跳发送被延迟。先前的心跳是在[xxxx] ms之前发送的,预期的间隔是[1000] ms。这可能会导致故障检测以将成员标记为不可访问。原因可能是线程饥饿,例如通过在默认调度程序,CPU超载或GC上运行阻止任务。
我正在使用IntelliJ,并在后端搜索我正在使用的任何context.dispatcher
位置,这与警告消息所抱怨的默认调度程序相对应。我在任何地方都使用期货,所以我不应该在任何重要的地方使用期货。所有的期货都由专门的ExecutionContext
作为后盾,这些{@ {1}}与我自己创建的自定义执行者Play框架执行者(https://www.playframework.com/documentation/2.7.x/ThreadPools#Using-the-default-thread-pool)相对应。
我特别要寻找的地方可能暴露问题所在吗?
我当前的堆栈如下:
使用PostgreSQL可以与数据库进行交互。
“播放Redis”-com.github.karelcemus
用于Redis缓存。
我希望通过社区的帮助或指导,我可以摆脱这些警告消息!