通过free -h 命令,发现服务器可用内存不足,并发现大量的内存被占用到buff/cache中。
一类,直接可以通过命令进行释放
sync; echo 3 > /proc/sys/vm/drop_caches
可以看到,cached的19G内存已经释放。
这种情况还算比较乐观的情况,一般也不用过度分析buff/cached占比这么高的原因,比较中轨中轨的解决方案是,写一个定时脚本进行buff/cached占用内容的释放,这里不做重点展示,可自行google.
第二类,通过释放内存的命令无法正常释放buff/cached占用的内容
遇到这种情况一般就需要具体分析是什么进程导致buff/cached占比这么高?
如果想分析都是哪些进程导致buffers/cached占比这么高,需要安装hcache.
1:安装hcache
网上搜索到比较多的方式是:wget http://7xir15.com1.z0.glb.clouddn.com/hcache
但是已经访问404了,也可以直接访问hcache的github项目,直接下载二进制文件,在拷贝到服务器上,git地址:https://github.com/silenceshell/hcache
2: 授权
chmod +x hcache
3:查看占用buff/cached的进程
hcache -top 10
发现项目中是mongodb占用了大部分的内存,查看相关资料得知3.4版本后,内存默认使用的是(系统内存-1GB)*50%
4: 解决方法
通过以下命令启用MongoDB
/usr/bin/mongod --config /etc/mongod.conf --fork --wiredTigerCacheSizeGB 8
关键在于 --wiredTigerCacheSizeGB 8 限制缓存使用内存大小为8GB,这样MongoDB使用的内存就是(8GB-1GB)* 50%