一般情况 用 pprof 就可以解决
比如 go tool pprof -inuse_space http://192.168.1.1:10000/debug/pprof/heap
然后TOP一下就知道那个函数占用内存过高了,然后在分析代码。基本就能找到
还有一种比较倒霉的情况 Linux TOP 里面的RES 很高, 但是 pprof 不高,这基本就是内存释放了 ,但是释放的内存只是给了GO程序,GO程序没有把内存给OS。我用的是GO 1.15 默认是MADV_FREE,释放给OS内存是很慢的。pprof 是统计已用的内存,未用的不统计,这就造成了和 TOP RES 不统一的现象。
解决方法就是添加环境变量 GODEBUG="madvdontneed=1" 就可以解决。这个是实时回收给OS的策略。如果不差内存的可以不用改,毕竟这样会稍微慢点!