Как отладить зависший поток Akka? - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь отладить поток akka, который в одной ситуации правильно извлекает новые данные, но в другой ситуации «застревает» и не извлекает новые данные. Все это полностью воспроизводимо, но вторая ситуация довольно сложна и требует нескольких минут настройки, чтобы начать работу. Дело в том, что этот поток Akka фактически создается в основном кодом akka-http и akka -actor, поэтому я на самом деле не знаю, как он выглядит под капотом, и это не очевидно из чтения кода, который я прочитал, поэтому далеко.

Итак, что я хотел бы сделать, это:

  • Посмотреть, как выглядит общий материализованный потоковый граф, или, по крайней мере, увидеть всю конструкцию в одном месте, а не разрозненно над различными исходными файлами. Есть ли способ выйти из материализованного графа?
  • Посмотрите, что вызывает соответствующее вытягивание в первой ситуации. Дело в том, что происходят и другие запросы, которые могут иметь значение, а могут и не быть, поэтому просто установка точки останова на метод, связанный с извлечением, может привести к сбивающим с толку, нерелевантным совпадениям. происходит во второй ситуации.

У меня уже есть приблизительное представление о проблеме вероятно - мой код недостаточно асинхронен - ​​но мне нужно понять, что происходит именно так, чтобы я мог написать регрессионный тест, который быстро воспроизводит проблему, без необходимости во всей этой сложной настройке, которая у меня есть во второй ситуации.

Я включил следующие параметры отладки и включил ведение журнала уровня DEBUG для всего, но, насколько я понимаю, он по-прежнему не регистрирует достаточно информации.

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