rust 如何监控停滞的任务?

yacmzcpb  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(139)

我正在运行一个Rust应用程序,时雄在prod。在上一个版本中,我有一个bug,一些请求导致我的代码进入无限循环。
当进入循环的任务被卡住时,所有其他任务继续正常工作并处理请求,直到停滞任务的数量足够高,导致我的程序没有响应。
我的问题是我们的监控系统花了很多时间来识别出问题。例如,响应Kubernetes健康检查的任务运行良好,我无法识别我在系统中暂停了任务。
所以我的问题是,在这种情况下,是否有一种识别和警报的方法?
如果我能找到一种方法来定义任务的超时,如果它没有返回到调度程序后X秒/米利斯标记为停滞的任务,这将是一个足够好的解决方案对我来说。

cnjp1d6j

cnjp1d6j1#

使用tracing可能是一个选项:在issue 2655之后,每个时雄任务都应该有一个跨度。除了tracing-futures,这意味着每次任务进入或暂停时,您都应该获得一个跟踪事件(参见此示例),通过添加相关数据(例如,task id / request id /...),然后您应该能够将此信息提供给分析工具,以便了解:

  • 任务被阻塞(已恢复,然后再也不会挂起)
  • 如果您添加自己的span,则“userland”span从未退出/关闭,这可能意味着它陷入了非阻塞循环(这也是一个问题,尽管不那么严重)

我认为这就是它的范围:如问题2510所指出的,时雄还没有使用它生成的跟踪信息,因此没有提供“内置”自检工具。

f0brbegy

f0brbegy2#

时雄控制台是由时雄团队构建的监控解决方案。它可以用来监视停滞的任务等。
在精神上,它就像最高指挥部,但专门为时雄。
https://github.com/tokio-rs/console

相关问题