ekg-core/GHC RTS:运行 在 Google Cloud 运行 上时的虚假 GC 统计
ekg-core/GHC RTS : bogus GC stats when running on Google Cloud Run
我在 Google 云基础设施上部署了两项服务;服务 1 在计算引擎上运行,服务 2 在云 运行 上运行,我想通过 ekg-core
库 (https://hackage.haskell.org/package/ekg-core-0.1.1.7/docs/System-Metrics.html).
记录它们的内存使用情况
记录括号与此类似:
mems <- newStore
registerGcMetrics mems
void $ concurrently io (loop mems)
where
loop ms = do
m <- sampleAll ms
... (lookup the gauges from m and log their values)
threadDelay dt
loop ms
我对此感到非常困惑:rts.gc.current_bytes_used
和 rts.gc.max_bytes_used
都测量 return 服务 2 中的常量 0(云 运行 一个),即使我为这两种服务使用相同的 sampling/logging 功能和构建选项。我应该补充一点,concurrently
中的并发进程是一个 Web 服务器,我预计基本内存负载约为 200 KB,而不是 0B。
我的知识到此为止;此行为可能是由于 Google Cloud 运行 管理程序(“gVisor”)以非标准方式实施某些系统调用(gVisor 系统调用指南:https://gvisor.dev/docs/user_guide/compatibility/linux/amd64/)?
感谢您对 guides/manuals/computer 智慧的任何指点。
详情:
两者都是使用这些选项构建的:
-optl-pthread -optc-Os -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T
唯一的区别是服务 2 有一个额外的标志 -with-rtsopts=-M2G
,因为云 运行 服务必须最多使用 2 GB 内存。
两种情况下的容器 OS 都是 Debian 10.4(“Buster”)。
再想一想,这种行为在“无服务器”模型中是完全合理的;当服务不处理请求 [1] 时,资源(CPU 和内存)被限制为 0,这正是 ekg 所选择的。
为什么即使在请求之外也打印出日志仍然有点神秘,但是..
[1] https://cloud.google.com/run/docs/reference/container-contract#lifecycle
我在 Google 云基础设施上部署了两项服务;服务 1 在计算引擎上运行,服务 2 在云 运行 上运行,我想通过 ekg-core
库 (https://hackage.haskell.org/package/ekg-core-0.1.1.7/docs/System-Metrics.html).
记录括号与此类似:
mems <- newStore
registerGcMetrics mems
void $ concurrently io (loop mems)
where
loop ms = do
m <- sampleAll ms
... (lookup the gauges from m and log their values)
threadDelay dt
loop ms
我对此感到非常困惑:rts.gc.current_bytes_used
和 rts.gc.max_bytes_used
都测量 return 服务 2 中的常量 0(云 运行 一个),即使我为这两种服务使用相同的 sampling/logging 功能和构建选项。我应该补充一点,concurrently
中的并发进程是一个 Web 服务器,我预计基本内存负载约为 200 KB,而不是 0B。
我的知识到此为止;此行为可能是由于 Google Cloud 运行 管理程序(“gVisor”)以非标准方式实施某些系统调用(gVisor 系统调用指南:https://gvisor.dev/docs/user_guide/compatibility/linux/amd64/)?
感谢您对 guides/manuals/computer 智慧的任何指点。
详情:
两者都是使用这些选项构建的:
-optl-pthread -optc-Os -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T
唯一的区别是服务 2 有一个额外的标志 -with-rtsopts=-M2G
,因为云 运行 服务必须最多使用 2 GB 内存。
两种情况下的容器 OS 都是 Debian 10.4(“Buster”)。
再想一想,这种行为在“无服务器”模型中是完全合理的;当服务不处理请求 [1] 时,资源(CPU 和内存)被限制为 0,这正是 ekg 所选择的。
为什么即使在请求之外也打印出日志仍然有点神秘,但是..
[1] https://cloud.google.com/run/docs/reference/container-contract#lifecycle