后端
Go 应用内存占用太多,让排查?(VSZ篇)
Posts on 煎é±0 次浏览
前段时间,某同学说某服务的容器因为超出内存限制,不断地重启,问我们是不是有内存泄露,赶紧排查,然后解决掉,省的出问题。我们大为震惊,赶紧查看监控+报警系统和性能分析,发现应用指标压根就不高,不像有泄露的样子。 那么问题是出在哪里了呢,我们进入某个容器里查看了 top 的系统指标,结果如下: PID VSZ RSS ... COMMAND 67459 2007m 136m ... ./eddycjy-server 从结果上来看,也没什么大开销的东西,主要就一个 Go 进程,一看,某同学就说 VSZ 那么高,而某云上的容器内存指标居然恰好和 VSZ 的值相接近,因此某同学就怀疑是不是 VSZ 所导致的,觉得存在一定的关联关系。 而从最终的结论上来讲,上述的表述是不全对的,那么在今天,本篇文章将主要围绕 Go 进程的 VSZ 来进行剖析,看看到底它为什么那么 “高”,而在正式开始分析前,第一节为前置的补充知识,大家可按顺序阅读。 基础知识 什么是 VSZ VSZ 是该进程所能使用的虚拟内存总大小,它包括进程可以访问的所有内存,其中包括了被换出的内存(Swap)、已分配但未使用的内存以及来自共享库的内存。
原文:https://eddycjy.com/posts/go/talk/2019-09-24-why-vsz-large/

