### Problem

One day, the upload feature of our server was failed because there were not enough memory on server.
So I logged into server and excute the free command:

However, the result of the top command showed that the free memory was 0 without any process which costed so much memory:

After a long time research on Google, I found that there was another kind of cache, Slab, whichfree command count as used memory.

### Slab

Slab Allocation is a kind of memory management mechanism which imported since Linux 2.2 which is used to cache data objects of the kernel. It can be understood as a kernel-specific object pool, which can improve system performance and reduce memory fragmentation. (After Linux 2.6.23, SLAB became the default allocator.)

Infomation about slab memory:

And we can also use the slabtop command or /proc/slabinfo to watch the detail of Slab Memory.

### Solve the Problem

#### Clear Reclaimable Cache of Slab

We can clear the reclaimable cache manualy by change the flag in /proc/sys/vm/drop_caches:

#### Change the System VM Config

Change the system vm config will have effect the timing of memory cleanup. However there is a risk of negative impact on system performance.

vm.vfs_cache_pressure: The larger the value is the faster that inode cache and dentry cache’s recycle will be.
vm.min_free_kbytes: By default, it is calculated based on the current memory at boot time. The larger the value, the sooner the system will start memory recovery.
vm.swappiness: The larger the swappiness is, the higher the swap rate of the system will be.