如何调试卡住的Akka流?
我试着调试一个akka流,在一种情况下,它可以提取新数据,但在另一种情况下,它被“卡住”了,不能提取新数据。这是完全可复制的,但第二种情况相当复杂,需要几分钟的设置才能开始。问题是,这个Akka流实际上主要是由Akka http和Akka actor代码创建的,所以我实际上不知道它在引擎盖下是什么样子,而且从我目前阅读的代码来看,这并不明显 所以我想做的是:如何调试卡住的Akka流?,akka,akka-stream,Akka,Akka Stream,我试着调试一个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中安排短任务的东西并不太困难,如果不能足够快地完成,则记录错误。