问题背景:
环境的内存快被消耗完了,发现都是shared占用的,重启会恢复,但是重启之后shared内存又会不断地增长,直到把所有的内存占完
排查过程:
1 使用top查看,并没有发现什么可疑的进程
2 使用ipcs查看共享内存的信息,也没发现什么异常,并且占用的内存都很小
3 最后为了排除自己对ipcs这个命令不了解的嫌疑,把上面owner用户的所有进程都kill了,shared还是纹丝不动
找不到问题之后,只能回归到问题的本质
使用man free 查了一下shared的解释,Memory used (mostly) by tmpfs ,tmpfs是一个基于内存的临时文件系统
4 所以使用df -h 查看了一下,当前不同文件系统的占用情况,也发现并没有占用很多的文件系统
最后使用mount查看了一下挂载情况,发现有很多的tmpfs文件系统的重复挂载
最后排查到是业务有个地方有一个重复挂载的bug
解决方案:
umount 掉这些重复挂载之后,替换业务代码,环境就恢复正常了
总结:
该问题的难点是:不了解free -g 展示的shared是如何定义的,统计的数据从何而来,所以无从下手定位,所以遇到问题没有思路的时候,还是得从原理出发,去发散可能性。