我在使用 golangs lib encoding/base64 的软件中遇到内存消耗问题
我的软件将视频文件拆分为单独的图像,(gocv mat)将它们转换为base64字符串并将其保存为json格式的文件。
在测试过程中,我发现内存使用量一直在增加,直到 oom-reaper 杀死进程。
对 pprof 的调查显示编码/base64 内存似乎堆积了起来。
我在每个图像帧之后进行了 pprof 快照,并且分配的编码/base64 内存在 oom-reaper 终止进程之前不久从 976.89kB(flat) 增加到 4633.54kB(flat)。
Beginning:
flat flat% sum% cum cum%
976.89kB 32.29% 32.29% 976.89kB 32.29% encoding/base64.(*Encoding).EncodeToString
512.50kB 16.94% 49.23% 512.50kB 16.94% runtime.allocm
512.20kB 16.93% 66.15% 512.20kB 16.93% runtime.malg
512.05kB 16.92% 83.08% 1488.94kB 49.21% runtime.main
512kB 16.92% 100% 512kB 16.92% time.resetTimer (inline)
0 0% 100% 976.89kB 32.29% main.Process
End:
Showing nodes accounting for 6170.44kB, 100% of 6170.44kB total
flat flat% sum% cum cum%
4633.54kB 75.09% 75.09% 4633.54kB 75.09% encoding/base64.(*Encoding).EncodeToString
1024.41kB 16.60% 91.69% 1024.41kB 16.60% runtime.malg
512.50kB 8.31% 100% 512.50kB 8.31% runtime.allocm
0 0% 100% 4633.54kB 75.09% main.Process
列表向我显示了与其对应的代码:
(pprof) list encoding/base64
Total: 2.95MB
ROUTINE ======================== encoding/base64.(*Encoding).EncodeToString in /usr/local/go/src/encoding/base64/base64.go
976.89kB 976.89kB (flat, cum) 32.29% of Total
. . 175:
. . 176:// EncodeToString returns the base64 encoding of src.
. . 177:func (enc *Encoding) EncodeToString(src []byte) string {
. . 178: buf := make([]byte, enc.EncodedLen(len(src)))
. . 179: enc.Encode(buf, src)
976.89kB 976.89kB 180: return string(buf)
. . 181:}
. . 182:
. . 183:type encoder struct {
. . 184: err error
. . 185: enc *Encoding
在这种情况下,如何释放“encodedString”的内存而不堆积?(更新:答案说这没有必要也不可能)
或者这可能不是我的错误编码,并且内存泄漏位于 lib base64 中?(更新:答案说这肯定不是这种情况)
慕森王
PIPIONE
慕姐8265434
随时随地看视频慕课网APP
相关分类