linuxmemoryswapfree-command

Linux amount of swap displayed by "free" is different from "smem"


I am trying to analyze from where the amount of swap is from, and looking at smem display I get a completely different amount of swap usage.

Free shows the following :

[root@server1 ~/smem-1.3]# free -k
             total       used       free     shared    buffers     cached
Mem:      24554040   24197360     356680          0     510200   14443128
-/+ buffers/cache:    9244032   15310008
Swap:     20980880    2473120   18507760

And smem shows :

  PID User     Command                         Swap      USS      PSS      RSS
...
18829 oracle   oracle_1 (LOCAL=NO)             0     3.9M    98.3M    10.1G
18813 oracle   oracle_1 (LOCAL=NO)             0     3.9M    98.6M    10.1G
18809 oracle   oracle_1 (LOCAL=NO)             0     4.1M    99.2M    10.0G
28657 oracle   ora_lms0_1                 56.0K    54.1M   100.3M     4.2G
29589 oracle   ora_lms1_1                964.0K    69.7M   118.9M     4.5G
29886 oracle   ora_dbw1_1                  5.7M    20.8M   130.9M    10.2G
29857 oracle   ora_dbw0_1                  4.2M    22.6M   133.0M    10.3G
11075 ccm_user /usr/java/jre1.6/bin/java -   197.8M   133.9M   135.9M   140.7M
21688 bsuser   /usr/local/java/bin/java -c    30.7M   145.1M   147.2M   152.1M
29930 oracle   ora_lck0_1                  2.3M    58.6M   169.8M     1.0G
29901 oracle   ora_smon_1                     0    78.0M   195.6M     4.3G
15604 oracle   /var/oragrid/jdk/jre//bin/j    65.4M   253.9M   254.3M   262.2M
-------------------------------------------------------------------------------
  359 10                                     678.8M     2.5G    13.5G     1.2T

Why free shows me "2.4G" and smem only shows me 679M? One of them is showing some wrong result.

I need to find out where are the remaining 1.8G, or prove that free is showing wrong results.

Last but not least, the kernel is 2.6.18.


Solution

  • Well, the main issue is RSS(resident set size) and PSS(proportional set size). From http://www.selenic.com/smem/ as it says - "PSS instead measures each application's "fair share" of each shared area to give a realistic measure". On the otherhand, RSS overestimates by calculating shared memory area of multiple applications as their own. And this is why, you see the difference. In simple word, smem can differentiate between applications shared memory and rather than treating shared area as every applications own!