Linux 内存无故占用过高的解决办法

今天监控到个很奇怪的问题,有台 Linux 主机上内存的 used 占用很高,而 top 中查看的内存占用,只有 20% 左右。如图,到底是什么占用了多余的内存?

!!! 啊哦,session 过期,现场被破坏,没能及时截图……

直接说说解决办法吧。

通过谷歌发现,存在一种叫 slab 内存占用的东西,通过 cat /proc/meminfo 可以查看。至于这个 slab 是神马东西我也还在研究,可参考底部链接,总之如果这一部分内存不能如期释放,会造成可用内存不足,影响主机性能。

释放命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# root 权限
# To free pagecache:
sync && echo 1 > /proc/sys/vm/drop_caches;
# To free dentries and inodes:
sync && echo 2 > /proc/sys/vm/drop_caches;
# To free pagecache, dentries and inodes:
sync && echo 3 > /proc/sys/vm/drop_caches;

# sudo 权限
# To free pagecache:
sudo sh -c "sync && echo 1 > /proc/sys/vm/drop_caches;";
# To free dentries and inodes:
sudo sh -c "sync && echo 2 > /proc/sys/vm/drop_caches;";
# To free pagecache, dentries and inodes:
sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches;";

通过测试,主要是在 2 阶段进行释放,也就是 free pagecache, dentries and inodes

附:
Linux内存之Slab
Linux slab 分配器剖析