cgroupsv2环境下内存分配超出memory.max限制的问题求助
cgroupsv2环境下内存分配超出memory.max限制的问题求助
各位大佬好,我最近在做一个生成人工内存负载的应用,想用cgroups来实时监控它的运行状态,看看内存接近限制时会出现什么情况。
这个应用的核心逻辑很简单:每秒分配一个20MiB的缓冲区,然后把它存在一个KV结构里——键是缓冲区的SHA256校验和,值就是缓冲区本身。每一轮循环还会遍历整个KV结构,检查所有缓冲区有没有和计算哈希时的内容不一致。
我用Go写的源码片段如下:
package main import ( "crypto/sha256" "fmt" "log" "math/rand" "os" "time" ) func main() { const bufSize = 20*1024*1024 mem := make(map[[32]byte][]byte) for { buf := make([]byte, bufSize) // Checking buffer if buf == nil { log.Fatal("make() returned nil buffer") } // 原代码后续部分未完整粘贴,核心逻辑如上述描述 } }
现在遇到的问题是:当我用cgroupsv2设置memory.max限制后,发现应用的内存分配有时会超出这个限制,或者触发OOM的时机和预期不太匹配。有没有大佬能帮忙分析下可能的原因?比如Go的内存分配机制和cgroupsv2的交互细节,或者我这个应用的逻辑有没有什么地方会导致内存统计不准?
备注:内容来源于stack exchange,提问作者x7upLime
相关产品推荐
相关产品推荐

