关于内存泄露的一场虚惊


最近有个前段时间做好的服务要放量,所以我上监控平台看了下机器的负载,结果吓了一跳。所有机器的内存使用率都呈现类似这样的曲线:

内存曲线

内存泄露了?吓尿……

看图示,60天大概增长了1GB的样子。

于是我赶紧ssh连到对应的机器,top看下进程的具体负载,MEM使用率只有0.6%。这是台16GB内存的服务器,也就是说服务进程只占到了100M左右内存。

那剩下的接近5GB的内存去哪儿了?

用free -m查看当前内存使用分布,used有5GB左右,free+cached有14.4GB,free+cache+buffers有15GB。而used减去buffers和cache仅有700MB。

free -m

经组内牛牛同事指点,原来,Linux为了加速文件的读写,会使用内存做cache。这部分内存只有等到系统需要使用内存时,系统才会释放,而目前这台服务器的内存只使用掉16GB中的5GB,因此就暂时没有释放。我们的服务正好有比较持续的读写文件操作,因此随着服务的启动时间越来越长,内存消耗曲线就一路飙升了。

这里的buffers和cached内存也可以手动进行释放,具体操作如下所示:

drop_caches


OK,最后总结一下。free命令查看内存使用情况时,以第二行 -/+ buffers/cache 为准哈。

虚惊一场,可以愉快的放量了。



推荐阅读:
使用双buffer无锁化
不要拷贝
Vim中的查找替换

转载请注明出处: http://blog.guoyb.com/2018/06/16/linux-mem/

欢迎使用微信扫描下方二维码,关注我的微信公众号TechTalking,技术·生活·思考:
后端技术小黑屋

Comments