最近发现生产上某Golang服务内存稳步飙升,通过监控完全看不到有内存降低时候。而奇怪的是,同样的版本放到其他环境上则没有这个问题。

在内部弄了个环境开启pprof,反复压测,一直无法重现问题。于是回过头去检查监控的数据是否有误差。经检查发现prometheus上抽取的数据达930M,而通过docker 以及其他系统方式查到的数据不到20M。经反复对比发现,prometheus上抽取的数据是包含缓存的数据,单独查询此服务的缓存,则数据为900M+,差额部分数据与docker查询出来接近,如此判断问题在于缓存。

最后,发现,日志文件没有配置log rotation,大小已经达到了12G。清空日志后惊喜的发现,内存瞬间暴降至20M。