如何从 Kubernetes 中的 Haskell 服务 运行 收集分析信息?

How to collect profiling info from Haskell service running in Kubernetes?

我有一个用Haskell写的微服务,编译器是8.8.3。 我用 --profile 选项构建它,运行 用 +RTS -p 选项构建它。 运行ning 大约 30 分钟,有 <my-service>.prof 个文件,但它是空的(实际上是 0 字节)。以前我是在我的本地机器上做的,我用 CTRL-C 停止服务,退出后它产生了 <my-service>.prof 文件,它不是空的。

所以,我有 2 个问题:

  1. 如何以最正确的方式(能够读取此 .prof 文件)在 Kubernetes 下的 Haskell 微服务 运行 时收集分析信息?
  2. 如何将 运行 时间参数传递给 Haskell 运行-time 保存此 .prof 文件的位置(如果没有这样的选项,可能会有一些解决方法),适用于 8.8.3 - 因为我觉得文件可能很大,我可能会遇到磁盘 space 问题。我也不知道如何在微服务 运行ning 时 flush/read/get 这个文件。我想如果我能够传递这个 .prof 文件的完整路径,那么我可以将它保存在某个永久卷上的其他地方,例如用 INT 信号“杀死”服务,并获得这个 .prof来自卷的文件。

当 Kubernetes 中的服务 运行s 时,usual/convenient 获取此 .prof 文件的方法是什么?

PS。我在最新版本的文档中看到了一些相关选项,但我使用的是 8.8.3

我认为使用 GHC 进行实时分析的唯一方法是使用事件日志。您可以将 Debug.Trace.traceEvent 插入到您要测量的函数的代码中,然后使用 -eventlog 和 运行 以及 +RTS -l -ol <output-file-name> -RTS 进行编译。您可以使用 ghc-events-analyze 来分析和可视化生成的事件日志。

GHC 8.8.3 的官方事件日志文档是 here