Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I have a Linux machine that is not running too much in the way of software, but is somehow using 1.7GB of the 2GB of the installed memory. When I run free, I get:

             total       used       free     shared    buffers     cached
Mem:       2072616    1979972      92644          0     164876     129740
-/+ buffers/cache:    1685356     387260
Swap:       498004       1632     496372

When I run top, I get the same numbers as the first line of free (can't reproduce since memory usage has now fixed itself).

However, when I run ps aux, the memory usage of all processes only comes out to 295.9MB, which is a far cry from the 1.7GB of memory that free reports as used.

Why is there such a discrepancy?

EDIT:

Here is the extra info requested, but I don't think it will help much since I've now show ~360MB used using free and ~300MB used using the totals from ps aux. Not sure why the problem corrected itself.

free

             total       used       free     shared    buffers     cached
Mem:       2072616     668484    1404132          0     185868     139196
-/+ buffers/cache:     343420    1729196
Swap:       498004       1632     496372

cat /proc/meminfo

MemTotal:        2072616 kB
MemFree:         1404628 kB
Buffers:          185792 kB
Cached:           139196 kB
SwapCached:          544 kB
Active:           411448 kB
Inactive:         210208 kB
Active(anon):     218636 kB
Inactive(anon):    78216 kB
Active(file):     192812 kB
Inactive(file):   131992 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1187784 kB
HighFree:         761112 kB
LowTotal:         884832 kB
LowFree:          643516 kB
SwapTotal:        498004 kB
SwapFree:         496372 kB
Dirty:                60 kB
Writeback:             0 kB
AnonPages:        296168 kB
Mapped:            14536 kB
Shmem:               184 kB
Slab:              39088 kB
SReclaimable:      31720 kB
SUnreclaim:         7368 kB
KernelStack:         888 kB
PageTables:         1184 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1534312 kB
Committed_AS:     407808 kB
VmallocTotal:     122880 kB
VmallocUsed:        5132 kB
VmallocChunk:     112808 kB
DirectMap4k:       12280 kB
DirectMap4M:      897024 kB

ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1620   548 ?        Ss   May18   0:04 init [3]
root         2  0.0  0.0      0     0 ?        S    May18   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    May18   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    May18   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    May18   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S    May18   0:00 [migration/1]
root         7  0.0  0.0      0     0 ?        S    May18   0:00 [ksoftirqd/1]
root         8  0.0  0.0      0     0 ?        S    May18   0:00 [watchdog/1]
root         9  0.0  0.0      0     0 ?        S    May18   0:00 [events/0]
root        10  0.0  0.0      0     0 ?        S    May18   0:00 [events/1]
root        11  0.0  0.0      0     0 ?        S    May18   0:00 [khelper]
root        17  0.0  0.0      0     0 ?        S    May18   0:00 [async/mgr]
root       166  0.0  0.0      0     0 ?        S    May18   0:00 [sync_supers]
root       168  0.0  0.0      0     0 ?        S    May18   0:00 [bdi-default]
root       170  0.0  0.0      0     0 ?        S    May18   0:03 [kblockd/0]
root       171  0.0  0.0      0     0 ?        S    May18   0:03 [kblockd/1]
root       174  0.0  0.0      0     0 ?        S    May18   0:00 [kacpid]
root       175  0.0  0.0      0     0 ?        S    May18   0:00 [kacpi_notify]
root       176  0.0  0.0      0     0 ?        S    May18   0:00 [kacpi_hotplug]
root       332  0.0  0.0      0     0 ?        S    May18   0:00 [ata/0]
root       333  0.0  0.0      0     0 ?        S    May18   0:00 [ata/1]
root       334  0.0  0.0      0     0 ?        S    May18   0:00 [ata_aux]
root       336  0.0  0.0      0     0 ?        S    May18   0:00 [kseriod]
root       371  0.0  0.0      0     0 ?        S    May18   0:00 [rpciod/0]
root       372  0.0  0.0      0     0 ?        S    May18   0:00 [rpciod/1]
root       406  0.0  0.0      0     0 ?        S    May18   0:00 [khungtaskd]
root       407  0.0  0.0      0     0 ?        S    May18   0:20 [kswapd0]
root       408  0.0  0.0      0     0 ?        S    May18   0:00 [aio/0]
root       409  0.0  0.0      0     0 ?        S    May18   0:00 [aio/1]
root       410  0.0  0.0      0     0 ?        S    May18   0:00 [nfsiod]
root       411  0.0  0.0      0     0 ?        S<   May18   0:00 [kslowd000]
root       412  0.0  0.0      0     0 ?        S<   May18   0:00 [kslowd001]
root       414  0.0  0.0      0     0 ?        S    May18   0:00 [crypto/0]
root       415  0.0  0.0      0     0 ?        S    May18   0:00 [crypto/1]
root      1172  0.0  0.0      0     0 ?        S    May18   0:00 [scsi_tgtd/0]
root      1173  0.0  0.0      0     0 ?        S    May18   0:00 [scsi_tgtd/1]
root      1177  0.0  0.0      0     0 ?        S    May18   0:00 [scsi_eh_0]
root      1215  0.0  0.0      0     0 ?        S    May18   0:00 [kpsmoused]
root      1228  0.0  0.0      0     0 ?        S    May18   0:05 [jbd2/sda3-8]
root      1229  0.0  0.0      0     0 ?        S    May18   0:00 [ext4-dio-unwr]
root      1230  0.0  0.0      0     0 ?        S    May18   0:00 [ext4-dio-unwr]
root      1322  0.0  0.0   2044   632 ?        S<s  May18   0:00 /sbin/udevd --d
root      1650  0.0  0.0      0     0 ?        S    May18   0:25 [vmmemctl]
root      1678  0.0  0.0      0     0 ?        S    May18   0:00 [kjournald]
root      1680  0.0  0.0      0     0 ?        S    May18   0:00 [ksuspend_usbd]
root      1681  0.0  0.0      0     0 ?        S    May18   0:00 [khubd]
root      1709  0.0  0.0      0     0 ?        S    May18   0:02 [flush-8:0]
root      3157  0.0  0.0   5976  1576 ?        Ss   May18   0:10 /usr/bin/vmtool
root      3222  0.0  0.0   5984   276 ?        S    May18   0:00 supervising sys
root      3223  0.0  0.0   6220  1452 ?        Ss   May18   0:00 /usr/sbin/syslo
root      3224  0.0  0.0   4428  1240 ?        S    May18   0:00 /bin/sh /etc/sy
clamav    3808  0.1 11.4 256396 237488 ?       SNsl May18   2:44 /usr/sbin/clamd
clamav    3818  0.0  0.0  12368  1684 ?        SNs  May18   0:03 /usr/bin/freshc
root      3984  0.0  0.0   4048  1164 ?        Ss   May18   0:00 /usr/sbin/ntpd
root      4106  0.0  0.0  14228  1868 ?        Ss   May18   0:00 /usr/sbin/smbd
root      4115  0.0  0.0   8360  1128 ?        Ss   May18   0:00 /usr/sbin/nmbd
root      4119  0.0  0.0  14228   852 ?        S    May18   0:00 /usr/sbin/smbd
root      4176  0.0  0.0   8488  1832 ?        Ss   May18   0:00 sendmail: accep
smmsp     4179  0.0  0.0   8212  1372 ?        Ss   May18   0:00 sendmail: Queue
root      4235  0.0  0.1   9824  2700 ?        S    May18   0:06 /usr/sbin/snmpd
root      4295  0.0  0.0   5684  1060 ?        Ss   May18   0:00 /usr/sbin/sshd
root      4415  0.0  0.0   2044   512 ?        S<   May18   0:00 /sbin/udevd --d
uptimed   4456  0.0  0.0   1620   440 ?        Ss   May18   0:00 /usr/sbin/uptim
root      4515  0.0  0.0   3456   716 ?        Ss   May18   0:00 /usr/sbin/cron
root      4609  0.0  0.0   1672   668 tty1     Ss+  May18   0:00 /sbin/agetty 38
root      4610  0.0  0.0   1672   668 tty2     Ss+  May18   0:00 /sbin/agetty 38
root      4611  0.0  0.0   1676   672 tty3     Ss+  May18   0:00 /sbin/agetty 38
root      4612  0.0  0.0   1672   668 tty4     Ss+  May18   0:00 /sbin/agetty 38
root      4613  0.0  0.0   1668   664 tty5     Ss+  May18   0:00 /sbin/agetty 38
root      4614  0.0  0.0   1668   664 tty6     Ss+  May18   0:00 /sbin/agetty 38
root      8761  0.0  0.1   8740  3000 ?        Ss   02:02   0:02 sshd: root@nott
root      8763  0.0  0.0   5356  1632 ?        Ss   02:02   0:02 /usr/lib/misc/s
root      8774  0.0  0.1   8744  2988 ?        Ss   02:02   0:00 sshd: root@nott
root      8776  0.0  0.0   5368  1632 ?        Ss   02:02   0:00 /usr/lib/misc/s
root      8787  0.0  0.1   8736  2944 ?        Ss   02:02   0:00 sshd: root@nott
root      8789  0.0  0.0   5232  1520 ?        Ss   02:02   0:00 /usr/lib/misc/s
root      8812  0.0  0.1   8740  3000 ?        Ss   02:04   0:12 sshd: root@nott
root      8814  0.0  0.0   5416  1676 ?        Ss   02:04   0:13 /usr/lib/misc/s
root      8825  0.0  0.1   8744  2992 ?        Ss   02:04   0:00 sshd: root@nott
root      8827  0.0  0.0   5352  1628 ?        Ss   02:04   0:00 /usr/lib/misc/s
root      8838  0.0  0.1   8880  3080 ?        Ss   02:04   0:00 sshd: root@nott
root      8840  0.0  0.0   5436  1768 ?        Ss   02:04   0:00 /usr/lib/misc/s
root     15237  0.0  0.1   8744  2856 ?        Ss   16:00   0:00 sshd: hudson-sl
1000     15239  0.0  0.0   8884  1844 ?        S    16:00   0:00 sshd: hudson-sl
1000     15240  0.0  0.0   2908  1084 ?        Ss   16:00   0:00 bash -c wget --
1000     15242  0.2  2.1 671620 44412 ?        Sl   16:00   0:08 /etc/java-confi
root     15575  0.0  0.1   8768  3008 ?        Ss   16:25   0:00 sshd: root@pts/
root     15577  0.0  0.0   4304  1012 pts/0    Ss+  16:25   0:00 /usr/bin/screen
root     15620  0.0  0.1   5428  2100 ?        Ss   16:25   0:00 /usr/bin/SCREEN
root     15621  0.0  0.1   5304  2576 pts/1    Ss+  16:25   0:00 -/bin/bash
smmsp    15875  0.0  0.1   8492  3476 ?        S    16:54   0:00 sendmail: o4JLs
root     15888  0.0  0.1   8768  3004 ?        Ss   16:58   0:00 sshd: root@pts/
root     15890  0.0  0.0   4316  1028 pts/2    Ss+  16:59   0:00 /usr/bin/screen
root     15933  0.0  0.1   5432  2096 ?        Ss   16:59   0:00 /usr/bin/SCREEN
root     15934  0.1  0.1   5304  2604 pts/3    Ss   16:59   0:00 -/bin/bash
root     16021  0.0  0.0   3856  1060 pts/3    R+   17:00   0:00 ps aux
share|improve this question
1  
4  
linuxatemyram.com –  Zoredache May 19 '10 at 21:19
1  
And a dozen others... serverfault.com/questions/73189/… –  Zoredache May 19 '10 at 21:20
    
@zoredache that site is hilarious. It could only be better if the penguin was animated :) –  voretaq7 May 19 '10 at 21:21
1  
Chris, You may need to actually post the full output of your ps aux then. –  Zoredache May 19 '10 at 21:51

1 Answer 1

up vote 9 down vote accepted

However, when I run ps aux, the memory usage of all processes only comes out to 295.9MB, which is a far cry from the 1.7GB of memory that free reports as used.

Why is there such a discrepancy?

Because linux memory management is just plain wacky? A very large graph of linux innards laid out in all their glory

Jokes aside, seriously - memory management in Linux is not a simple beast. There are different ways of "viewing" what is "Free" and "Used", and even the most obvious number might not be so obvious once you look into it. I think you might want to quantify what your definition of "used" is, and then apply that definition to the numbers you're looking at, especially with regard to what numbers your using.

  1. Are you taking into account shared memory? Depending on how you count "used", a program's memory can be small or much, much larger. Do you count shared memory separately, or as if each process attached to it owns it?

  2. Shared libraries can also have the same behavior: a program loads a library (libmylibrary.so) that is shared with another program. One view of memory says that the library doesn't count towards the memory used; another view says that it not only does, but it will count it twice - once for the program that just used it and again for the program that was already using it, because each program will need a virtual memory mapping for the library to work. A third view says the library really occupies only the memory that was needed to load it. Which one is the "correct" view of memory?

  3. Disk cache/buffers can also create complicated views of what is and isn't "used" vs. "free". The system will use up memory that is not in use by programs, but if it needs the memory to load a program, the cache is discarded and re-used to load an instance of that program. You could easily have only 3Mbyte of code loaded in memory but be consuming 600Mbyte of disk cache. Again, which one is the "correct" view?

share|improve this answer
    
+1 for shared memory. –  Matt May 19 '10 at 22:58

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.