机器内存耗尽了?
今天发现一些应用所在的机器其JVM只占了总共8G中2G的空间。Pagecache也只占了1个G,但是freeg出来内存确已耗尽:freeg
totalusedfreesharedbufferscached
Mem:770001
这个看上去很吓人。遇到这种情况,我们先catprocmeminfo看下具体的内存占用情况catprocmeminfo
MemTotal:8123456KB(8G)
。。。。。。
Slab:3671234KB(3。6G)
SReclaimable:351234(3。5G)
我们可以看到有将近3。6G被耗尽在Slab这一项里面,紧接着下面一项SReclaimable,表示这3。6个G中可回收的为3。5G。而这部分都统计在used里面,所以看上去吓人。
什么导致了slab过高
我们可以slabtop一下slabtop
3123456K(3。1G)dentry
发现是目录项导致。这可能是内核访问了一个拥有特别多文件的文件夹导致。不过由于可回收,所以我们不用太担心。
手动清理
我们可以通过echo2procsysvmdropcaches
手动清理可回收的slab内存。不过,清理当时,会对上面跑的应用有一定的影响。最好先下流量再做操作。