【问题标题】:How to collect profiling info from Haskell service running in Kubernetes?如何从 Kubernetes 中运行的 Haskell 服务收集分析信息?
【发布时间】:2021-06-09 13:50:29
【问题描述】:

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

所以,我有两个问题:

  1. 当 Haskell 微服务在 Kubernetes 下以最正确的方式运行时如何收集 profiling 信息(以便能够读取此 .prof 文件)?
  2. 对于 8.8.3,如何将运行时参数传递给 Haskell 运行时保存此 .prof 文件的位置(如果没有这样的选项,可能有一些解决方法) - 因为我觉得文件可能很大,我可以命中磁盘空间问题。此外,我不知道如何在微服务运行时刷新/读取/获取此文件。我想如果我能够传递这个 .prof 文件的完整路径,那么我可以将它保存在某个永久卷上的其他位置,例如用INT 信号“杀死”服务,并从中获取这个 .prof 文件音量。

当服务在 Kubernetes 中运行时,获取此 .prof 文件的常用/便捷方式是什么?

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

【问题讨论】:

    标签: haskell kubernetes profiling


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多