如何监视暂停的任务



我在prod中运行一个带有Tokio的Rust应用程序。在上一个版本中,我遇到了一个错误,一些请求导致我的代码进入了无限循环。

发生的情况是,当进入循环的任务被卡住时,所有其他任务都继续正常工作并处理请求,直到停滞的任务数量高到足以导致我的程序没有响应。

我的问题是,我们的监控系统花了很多时间来确定出了问题。例如,响应Kubernetes的健康检查的任务运行良好,并且我无法确定我的系统中已经停止了任务。

所以我的问题是,在这种情况下,是否有办法识别和提醒?

如果我能找到定义任务超时的方法,如果它在X秒/毫秒后没有返回到调度器,将任务标记为已停止,这对我来说将是一个足够好的解决方案。

在这里使用tracing可能是一个选项:在问题2655之后,每个tokio任务都应该有一个跨度。除了跟踪未来,这意味着每次输入或挂起任务时都应该得到一个跟踪事件(参见本示例(,通过添加相关数据(例如任务id/请求id/…(,您应该能够将这些信息提供给分析工具,以便了解:

  • 任务被阻止(已恢复,然后再也没有挂起(
  • 如果你加上你自己的跨度;userland";span从未退出/关闭,这可能意味着它被困在一个非阻塞循环中(这也是一个问题,尽管稍微不那么严重(

我认为这就是它的范围:正如问题2510所指出的,tokio还没有使用它生成的跟踪信息,因此没有提供";内置的";反省设施。

Tokio控制台是Tokio团队构建的监控解决方案。它可以用于监视暂停的任务等。

在精神上,它就像是最高命令,但专门针对Tokio。

https://github.com/tokio-rs/console

最新更新