Linux is borrowing unused memory for disk caching. This makes it look like you are low on memory, but you are not! Everything is fine!
Disk caching makes the system much faster and more responsive! There are no downsides, except for confusing newbies. It does not take memory away from applications in any way, ever!
If your applications want more memory, they just take back a chunk that the disk cache borrowed. Disk cache can always be given back to applications immediately! You are not low on ram!
No, disk caching only borrows the ram that applications don't currently want. It will not use swap. If applications want more memory, they just take it back from the disk cache. They will not start swapping.
You can't disable disk caching. The only reason anyone ever wants to disable disk caching is because they think it takes memory away from their applications, which it doesn't! Disk cache makes applications load faster and run smoother, but it NEVER EVER takes memory away from them! Therefore, there's absolutely no reason to disable it!
If,
however, you find yourself needing to clear some RAM quickly to workaround
another issue, like a VM misbehaving, you can force linux to
nondestructively drop
caches using echo
3 | sudo tee /proc/sys/vm/drop_caches
.
This is just a difference in terminology. Both you and Linux agree that memory taken by applications is "used", while memory that isn't used for anything is "free".
But how do you count memory that is currently used for something, but can still be made available to applications?
You might count that memory as "free" and/or "available". Linux instead counts it as "used", but also "available":
Memory that is | You'd call it | Linux calls it |
---|---|---|
used by applications | Used | Used |
used, but can be made available | Free (or Available) | Used (and Available) |
not used for anything | Free | Free |
This "something" is (roughly) what top and free calls "buffers" and "cached". Since your and Linux's terminology differs, you might think you are low on ram when you're not.
To
see how much ram your applications could use without swapping, run free
-m
and look at the "available" column:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 792
Swap: 2047 6 2041
(On installations from before 2016, look at "free" column in the "-/+ buffers/cache" row instead.)
This is your answer in MiB. If you just naively look at "used" and "free", you'll think your ram is 99% full when it's really just 47%!
A healthy Linux system with more than enough memory will, after running for a while, show the following expected and harmless behavior:
free
memory
is close to 0
used
memory
is close to total
available
memory
(or "free + buffers/cache") has enough room (let's say, 20%+ of total)swap
used
does not changeWarning signs of a genuine low memory situation that you may want to look into:
available
memory
(or "free + buffers/cache") is close to zeroswap
used
increases or fluctuatesdmesg
| grep oom-killer
shows the
OutOfMemory-killer at workSee this page for more details and how you can experiment with disk cache to show the effects described here. Few things make you appreciate disk caching more than measuring an order-of-magnitude speedup on your own hardware!