我想确保内存不足时,我的pod不会重新启动。现在,我看到该容器的heapMem使用率较低,但是SysMem的使用率已增加到4Gb,并且不随heapMem的使用而减少。我相信GC应该已经将此返回给OS。

go - goroutine不会将内存返回操作系统-LMLPHP

用于监视go_memstats_alloc_bytesgo_memstats_sys_bytes的Prometheus统计信息。我还看到go_memstats_gc_cpu_fraction不会增加加类时间。

我想念什么吗?是否存在内存泄漏?

最佳答案

它看起来不像是图中的内存泄漏,而只是临时使用更多内存。请注意,在GC之后,如果再次需要释放的内存,则不会(立即)将释放的内存返回给OS。如果您有一个临时的内存高峰,它将随着时间的推移返回到操作系统。

在某些系统中,除非别处需要它,否则可能无法接受它的OS只能使用该OS。 (这已在评论中指出,但我不想过多介绍,以免引起混淆。)

您可以使用debug.FreeOSMemory()强制立即释放已释放的内存。

关于go - goroutine不会将内存返回操作系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60609191/

10-12 00:12
查看更多