Introduction Link to heading

Just a few notes about how to get informations how memory on linux, and common tools to read them.

Consultation Link to heading

It’s possible to read about memory use under linux by multiple ways: /proc/meminfo, free, vmstat, top

Those tools allow to get information about physical memory as virtual memory.

Firstly, we can get general infos reading /proc/meminfo or using free:

$ cat /proc/meminfo
MemTotal:        8058060 kB
MemFree:          757660 kB
Buffers:          401752 kB
Cached:          2958380 kB
SwapCached:       162336 kB
  • MemTotal: Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)
  • MemFree: Is sum of LowFree+HighFree (overall stat)
  • Buffers: Memory in buffer cache
  • Cached: Memory in the pagecache (diskcache) minus SwapCache (Doesn’t include SwapCached though)
  • SwapCached: Memory that once was swapped out, is swapped back in but still also is in the swapfile
$ free -m
             total       used       free     shared    buffers     cached
Mem:          7869       7106        763          0        392       2893
-/+ buffers/cache:       3820       4048
Swap:         8073        601       7472

Then, we have to understand the top output:

top - 11:11:11 up 23 days, 17:37, 10 users,  load average: 0.18, 0.16, 0.18
Tasks: 356 total,   1 running, 307 sleeping,   0 stopped,  48 zombie
%Cpu(s):  2.3 us,  1.4 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  16314188 total, 13358168 used,  2956020 free,   532416 buffers
KiB Swap: 16658428 total,      444 used, 16657984 free.  9372752 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18228 mycroft   20   0 1469652 398888  93480 S   5.0  2.4  81:13.74 chromium-browse
18183 mycroft   20   0 1426144 249424  94916 S   4.3  1.5  77:29.87 chromium-browse
 2124 root      20   0  365924  90976  56240 S   2.6  0.6 488:25.19 Xorg
18437 mycroft   20   0 1336024 364608  37372 S   1.7  2.2  34:40.92 chromium-browse
  • Virtual: Virtual memory allocated, including all code, data and shared libraries
  • Resident: Non swapped physical memory
  • Shared: Amount of memory available potentially shared with other proccesses

vmstat reports virtual memory statistics:

$ vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0 615740 831376 401696 2970016    2    2    87   139   41   39  4  4 92  1
 0  0 615740 833200 401696 2967316    0    0     0    15  853 1576  3  2 95  0
 0  0 615740 832860 401696 2967932    0    0     0    83  704 1239  3  1 96  0
 0  0 615740 837280 401696 2963756    0    0     0    92  864 1362  2  1 97  0

Les noyaux Linux récents fournissent un mécanisme pour que le noyau libère certains éléments stockés en mémoire à la demande, ce qui permet de libérer une partie de la mémoire. Pour cela, il faut utiliser le fichier /proc/sys/vm/drop_caches:

Recent linux kernels provide a mechanism to drop the page cache, inodes and dentry caches, which can free up a lot of memory, using virtual file /proc/sys/vm/drop_caches:

To free pagecache:

# echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

# echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

# echo 3 > /proc/sys/vm/drop_caches

These operations are non destructive and will only free non used things. Think to sync to flush I/O buffers before, and you may free more memory.

Source

Finding out what processes are swapping Link to heading

More recently, I needed to find out what processes had some memory stored in swap (which is way slower than RAM).

The swap information for each processes can also be found in /proc/<pid>/status:

$ cat /proc/$$/status | grep VmSwap
VmSwap:        0 kB