haskell - 如何从 Kubernetes 中运行的 Haskell 服务收集分析信息?
问题描述
我有一个用 Haskell 编写的微服务,编译器是 8.8.3。我使用--profile
选项构建它并使用+RTS -p
. 它运行了大约 30 分钟,有<my-service>.prof
文件但它是空的(字面意思是 0 字节)。以前我是在我的本地机器上做的,我用 CTRL-C 停止服务,退出后它产生的<my-service>.prof
文件不是空的。
所以,我有两个问题:
- 当 Haskell 微服务以最正确的方式在 Kubernetes 下运行时,如何收集 profiling 信息(以便能够读取这个 .prof 文件)?
- 如何将运行时参数传递给 Haskell 运行时保存此 .prof 文件的位置(如果没有这样的选项,可能有一些解决方法),对于 8.8.3 - 因为我觉得文件可能很大并且我可以使用磁盘空间问题。此外,我不知道如何在微服务运行时刷新/读取/获取此文件。我想如果我能够传递这个 .prof 文件的完整路径,那么我可以将它保存在某个永久卷上的其他位置,
INT
例如用信号“杀死”服务,并从卷中获取这个 .prof 文件。
当服务在 Kubernetes 中运行时,获取此 .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-api - 如何组合 JS API URL 调用?
- azure - 是否可以使用 Azure 自动化 Runbook 删除另一个 Runbook 输出(Azure 文件共享快照)?
- angular - 如何以角度获得反应形式的价值组件?
- nativescript - 进度指示器在 android 平台 nativescript 中的 TabView 内没有停止
- c# - 如何在 MongoDB 的 Linq 查询中使用 .Contains 和 ToLower?
- react-native - React Native Pan Responder 为单个动态视图设置动画
- angular - 如何按选定值过滤数据?
- c++ - 如何在字符串c ++中附加Hexa十进制值?
- php - PHP cURL POST 返回 bool(false)
- android - “task.isSuccessful”在 CreatewithUseremailandpassword 中总是返回 false