如何调试卡住的Akka流?

如何调试卡住的Akka流?,akka,akka-stream,Akka,Akka Stream,我试着调试一个akka流,在一种情况下,它可以提取新数据,但在另一种情况下,它被“卡住”了,不能提取新数据。这是完全可复制的,但第二种情况相当复杂,需要几分钟的设置才能开始。问题是,这个Akka流实际上主要是由Akka http和Akka actor代码创建的,所以我实际上不知道它在引擎盖下是什么样子,而且从我目前阅读的代码来看,这并不明显 所以我想做的是: 查看整体实体化流图的外观,或者至少在一个位置查看所有构造,而不是分散在各种源文件中。有没有办法注销具体化的图表 查看在第一种情况下导致相

我试着调试一个akka流,在一种情况下,它可以提取新数据,但在另一种情况下,它被“卡住”了,不能提取新数据。这是完全可复制的,但第二种情况相当复杂,需要几分钟的设置才能开始。问题是,这个Akka流实际上主要是由Akka http和Akka actor代码创建的,所以我实际上不知道它在引擎盖下是什么样子,而且从我目前阅读的代码来看,这并不明显

所以我想做的是:

  • 查看整体实体化流图的外观,或者至少在一个位置查看所有构造,而不是分散在各种源文件中。有没有办法注销具体化的图表
  • 查看在第一种情况下导致相关拉动发生的原因。问题是,还有其他拉取发生,可能相关,也可能不相关,因此仅在拉取相关的方法上设置断点可能会导致混乱、不相关的点击
  • 找出为什么在第二种情况下不会发生同样的拉动
我已经大致了解了问题可能是什么——我的代码不够异步——但我需要准确地理解发生了什么,这样我就可以编写一个回归测试,快速重现问题,而不需要第二种情况下的所有复杂设置

我已经启用了以下调试选项并为所有内容启用了调试级别日志记录,但就我所见,它仍然没有记录足够的信息

akka {
  http {
    host-connection-pool {
      idle-timeout = infinite
    }
  }
  io {
    tcp {
      trace-logging = on
      windows-connection-abort-workaround-enabled = auto
    }
  }
  loglevel = "DEBUG"
}

如果没有代码片段,就很难解决您的确切问题。您可以尝试使用生成一个吗?太多的同步代码通常会在各种dispatchers/
ExecutionContext
s中的线程饥饿中表现出来。如果您是lightbend的订户,那么使用线程饥饿检测器来跟踪这类事情是非常值得的;如果您不知道,那么实现在自己的线程池中运行并在dispatchers/ECs中安排短任务的东西并不太困难,如果它不能足够快地完成任务,则记录错误。如果没有代码片段,则很难解决您的确切问题。您可以尝试使用生成一个吗?太多的同步代码通常会在各种dispatchers/
ExecutionContext
s中的线程饥饿中表现出来。如果您是lightbend的订户,那么使用线程饥饿检测器来跟踪这类事情是非常值得的;如果您不是,那么实现在自己的线程池中运行并在dispatchers/ECs中安排短任务的东西并不太困难,如果不能足够快地完成,则记录错误。