機器內(nèi)存耗盡了?
今天發(fā)現(xiàn)一些應(yīng)用所在的機器其JVM只占了總共8G中2G的空間。Page cache也只占了1個G,但是free -g出來內(nèi)存確已耗盡:
free -g
total used free shared buffers cached
Mem: 7 7 0 0 0 1這個看上去很嚇人。遇到這種情況,我們先cat /proc/meminfo看下具體的內(nèi)存占用情況
cat /proc/meminfo
MemTotal: 8123456KB (8G)
......
Slab: 3671234KB (3.6G)
SReclaimable: 351234 (3.5G)我們可以看到有將近3.6G被耗盡在Slab這一項里面,緊接著下面一項SReclaimable,表示這3.6個G中可回收的為3.5G。而這部分都統(tǒng)計在used里面,所以看上去嚇人。
什么導(dǎo)致了slab過高
我們可以slabtop一下
slabtop
3123456K(3.1G) dentry發(fā)現(xiàn)是目錄項導(dǎo)致。這可能是內(nèi)核訪問了一個擁有特別多文件的文件夾導(dǎo)致。不過由于可回收,所以我們不用太擔心。
手動清理
我們可以通過
echo 2 > /proc/sys/vm/drop_caches手動清理可回收的slab內(nèi)存。不過,清理當時,會對上面跑的應(yīng)用有一定的影響。最好先下流量再做操作。
代碼寫累了?吃點堅果爽一爽。
評論
圖片
表情
