High RAM usage, extremely low swapping

Hi team

I have three physical servers running on Red Hat Enterprise Linux Server release 6.2 with the following memory conditions:

# cat /proc/meminfo | grep -i mem
MemTotal:        8062888 kB
MemFree:          184540 kB
Shmem:               516 kB

and the following swap conditions:

# cat /proc/meminfo | grep -i swap
SwapCached:          688 kB
SwapTotal:      10305528 kB
SwapFree:       10302584 kB

# cat /proc/sys/vm/swappiness
60

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       10305528        2944    -1

As you can see the swapspace is double the size of memory and yet the swap usage is relatively low compared to actual memory usage:

# free -mt
                     total       used       free     shared    buffers     cached
Mem:          7873       7693        179          0        380       4241
-/+ buffers/cache:       3071       4802
Swap:        10063          2      10061
Total:       17937       7696      10241

I am trying to understand why the processes are not using swap instead, but relying on RAM until it reached a critical level of 97% last weekend (sorry, haven't got the numbers all I have are charts from nagios) How can I make the process use swap instead of so much of RAM?

Having an aye-karamba moment here
:confused:

Hi, this is normal Linux behavior. Linux uses free memory for cache and buffers, which is immediately released when it is needed.. Search these forums for more details..

Scrutinizer, I did search and found that it's OK for RAM usage to be critically high, but if customer has no issue with high swapping (i know disk access will be slower) wouldn't this be a better option instead?

No, in general, it is not a better option. See Help! Linux ate my RAM!

1 Like

You are having the standard linux newbie memory freakout. We sometimes see a few of these a month. Take a deep breath and relax -- you're not running out of memory.

Memory that's otherwise sitting idle gets used for caches when there's anything to cache, because it's wasted just sitting around doing nothing. The kernel gives it up just as readily as any other unused memory -- you don't need to "free" anything or put your computer through weird convolutions to "release the cache". Everything is fine.

Just consider 'cache' and 'free' to get truer numbers on how much memory is available.

1 Like

This might help you out also:

vmstat -s -S M | egrep 'mem|swap'

Memory is faster than swap. If you have a lot of unused memory, then you are wasting it.

1 Like

@corona, thanks that was a relief. I logged a case with RHEL just in case and they told me the same thing you did but in totally incomprehensible terms :smiley:

@mark, thanks for the vmstat syntax. I suppose cat /proc/meminfo provided me with more or less the same info

@murphy, I did check the link you provided but I got lost halfway thru :smiley: I think I was just too stressed to figure it out yesterday!

Anyways, just in case someone comes across this thread and wants answers, following is the math concoction:

For example (Units are in megabytes):

# free -m
             total       used       free     shared    buffers     cached
Mem:          1000        900        100          0        350        350
-/+ buffers/cache:        200        800

In this example, as far as applications are concerned the system is using only 200MB of memory and has 800MB free and available for use if needed.

Note: in this example,

    Total Physical Memory = 1000 M

    Physically Used Memory = 900 M

    Actual used memory = 200 M

    buffers = 350 M

    cached = 350 M

    Physically Free Memory = 100 M

    Memory free for Applications = 800 M

The items to note here are:

<Physically Used Memory> = <Actual used memory> + <buffers> + <cache> = 200 + 350 + 350 = 900 M

<Physically Free Memory> = <Total Physical Memory> - <Actual used memory> - <buffers> - <cache> = 1000 - 200 - 350 - 350 = 100 M

<Memory free for Applications> = <Total Physical Memory> - <Actual used memory> = 1000 - 200 = 800 M

<Memory used  by Applications> = <Physically Used Memory> - <buffers> - <cache> = 900 - 350 - 350 = 200 M

1 Like