我在谷歌云基础设施上部署了两个服务;服务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我对此感到非常困惑:在服务2(云运行1)的情况下,rts.gc.current_bytes_used和rts.gc.max_bytes_used量规都返回常量0,即使我使用相同的采样/日志记录功能和为这两个服务构建选项。我应该补充说,concurrently中的并发进程是一个web服务器,我预计基本内存负载大约为200KB,而不是0B。
这就是我的知识结束的地方;这种行为会不会是由于谷歌云运行管理程序("gVisor")以非标准的方式实现了某些syscall (gVisor syscall指南:https://gvisor.dev/docs/user_guide/compatibility/linux/amd64/)?
感谢您对指南/手册/计算机智慧的任何指点。
详细信息:
这两个选项都是使用以下选项构建的:
-optl-pthread -optc-Os -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T
唯一的区别是,服务2有一个额外的标志-with-rtsopts=-M2G,因为云运行服务必须使用最多2 GB的内存。这两种情况下的容器操作系统都是Debian 10.4 ("Buster")。
发布于 2020-07-05 03:02:23
https://stackoverflow.com/questions/62730996
复制相似问题