How do I clean or disable the memory cache?

163,464

Solution 1

Note: Linux is NOT "eating" your RAM! Please take a look at Geirha's excellent answer below to understand why...

After the above note, if you still feel "cleaning" the cache could help, you can certainly try: it's a one-liner from the terminal:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

There's no easy way to disable the cache, but you can achieve the same effect by cleaning it as often as every minute, if you want to:

  • Make it a cron-job

  • Press Alt-F2, type gksudo gedit /etc/crontab, and add this line near the bottom:

    */15 * * * * root sync && echo 3 > /proc/sys/vm/drop_caches

  • This cleans every 15 minutes. You can set to 1 or 5 minutes if you really want to by changing the first parameter to * or */5 instead of */15

One liner to know REAL free RAM, excepting cache

Geirha's answer explains the details, but in short, you get the number of free megabytes with:

free -m | sed -n -e '3p' | grep -Po "\d+$"

which on my 2GB command-line server returns an extremely health 1835.

Solution 2

Help! Linux ate my RAM!

www.linuxatemyram.com explains this beautifully in FAQ form, with the essentials being:

What's going on?

Linux is borrowing unused memory for disk caching. This makes it looks like you are low on memory, but you are not! Everything is fine!

Why is it doing this?

Disk caching makes the system much faster! There are no downsides, except for confusing newbies. It does not take memory away from applications in any way, ever!

What if I want to run more applications?

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!

How do I see how much free ram I really have?

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
This is your answer in mebibytes.

Source: as mentioned, the excellent www.linuxatemyram.com -- please visit for more information.

Solution 3

To Check your Current Memory Usage

 watch -n 1 free -m

or

 watch -n 1 cat /proc/meminfo

To Free Up Space

 sudo sysctl -w vm.drop_caches=3

NOTE: this action won't make your system faster nor it will affect its stability and performance, it will just clean up memory used by the Linux Kernel on caches.

or

 sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

NOTE: You can use cron jobs to schedule the commands above to run at specific time intervals.

Share:
163,464

Related videos on Youtube

Bharadwaj Srigiriraju
Author by

Bharadwaj Srigiriraju

Hi, I am a Software Engineer from India, interested in building web applications and machine learning. Also a Computer Science graduate. I am interested in wide-range of topics, and you can find some of them on my other Stack Exchange network profiles.

Updated on September 18, 2022

Comments

  • Bharadwaj Srigiriraju
    Bharadwaj Srigiriraju over 1 year

    After the system starts, in a few minutes my memory cache fills up and it starts using the swap. Here's a screenshot of /proc/meminfo.

    memory

    However, if I can disable this process / clean the cache once after that, I think my system will speed up to some extent. Correct me if I am wrong here.

    I have also tried Bleachbit memory cleaning, but it doesn't seem to clean the memory cache properly. Also, the feature is still in an experimental stage.

    bleachbit memory

    There was already a similar question posted here: How can I disable the prefetch cache?, but it was regarding Ubuntu Server, and also the answers involved manual settings etc.

    So, I want to know if there's some software for disabling/enabling Memory Cache for Ubuntu 12.04.

  • Reid
    Reid almost 12 years
    Ergh! Knocking out the cache is bad enough, but making a cronjob for it? I mean, this does "solve" the question, so to speak, but that doesn't make it any less painful.
  • ish
    ish almost 12 years
  • Bharadwaj Srigiriraju
    Bharadwaj Srigiriraju almost 12 years
    @geirha: Thanks for the link... It was very informative and I liked the experiments given at the end!!
  • Bharadwaj Srigiriraju
    Bharadwaj Srigiriraju almost 12 years
    @izx: hmm... so this is how one creates a cronjob. If I am going to drop the cache periodically, doesn't it mean that I am actually slowing down the system? If that were the case, I think your answer sounds more like a theoretical answer than geirha's answer. :p Good answer BTW...
  • ish
    ish almost 12 years
    @ForbiddenOverseer: I only put that in because you wanted to "disable" the cache, and dropping it periodically is the only way to accomplish that. My note at the top (and geirha's link) clearly states that the cache actually speeds up your system most of the time, even if it looks like its "eating your RAM) --- so yes, IMO you would be slowing down your system, but you wanted to try it, so I just answered your question instead of simply nagging you and telling you it's a bad idea and so you shouldn't do it! I just gave you the power to experiment... :D
  • ish
    ish almost 12 years
    @ForbiddenOverseer: see my comment in my answer for a detailed reply -- I gave you the short version of why you shouldn't do it, but then answered your question anyway, giving you the power to experiment and try it out for yourself. If you don't think cleaning/dropping the cache helps, just don't do it anymore :)
  • geirha
    geirha almost 12 years
    @izx, I found it a bit hard to do that for this case. However, you did write a useful text on the matter, so perhaps you could just add the url to your answer, and we delete my answer?
  • ish
    ish almost 12 years
    No need, your link in an excellent resource; I just incorporated some parts into the answer (with attribution) so that it's now a perfectly valid alternative (in fact the better answer as seen by the public!) Great job, upvoted - welcome to 5k!
  • Bharadwaj Srigiriraju
    Bharadwaj Srigiriraju almost 12 years
    Oh... I can see that the answers have changed... Now, this one's sure a great answer!! @geirha: My apologies. May be I was too quick to judge an answer... I will think more when I vote next time. Regardless of what answer I have accepted for, I am sure the upvotes this answer got shows that this might be more helpful to people.
  • Eimantas
    Eimantas over 10 years
    I am using Ubuntu Server 12.04 LTS as a VDS. I am trying approach provided in this answer, but I am constantly getting tee: /proc/sys/vm/drop_caches: Permission denied. Any tips?
  • Damodar Bashyal
    Damodar Bashyal about 7 years
    This cron job did the trick for me in centos 7 in vagrant * * * * * sync; echo 3 > /proc/sys/vm/drop_caches
  • rocksNwaves
    rocksNwaves over 3 years
    "There are no downsides except confusing newbies" - Why'd ya have to call me out like that.
  • Mikko Rantalainen
    Mikko Rantalainen over 3 years
    Before starting to drop_caches on production, be absolutely sure that truly helps the overall picture. The changes are very high that your performance as a whole will suffer from dropping the caches.
  • Mikko Rantalainen
    Mikko Rantalainen over 3 years
    Also worth mentioning is that with modern kernels the Available is the only number you should look at. For example, if you use PostgreSQL with 10 GB shared_buffers setting it will show up as extra 10 GB in the buff/cache display and kernel cannot drop those caches on need.
  • Mikko Rantalainen
    Mikko Rantalainen over 3 years
    Note that if your workload prefers having e.g. 200 MB of free RAM (to allow up to 200 MB process to launch without needing to carve the RAM from cache) just set /proc/sys/vm/min_free_kbytes as needed. No need to drop caches for that!
  • Alexis Wilke
    Alexis Wilke about 2 years
    I have a machine with 0.5Tb of RAM and even though there is a lot of memory marked available, it will swap once in a while... Any idea why that would happen? See superuser.com/questions/1517266