[erlang-questions] Memory issue: big swap usage

Gustav Simonsson <>
Mon Jul 16 12:06:26 CEST 2012


Hi,

The swap column in top does not represent the current swap usage of processes.
Rather, it represents how much swap would be necessary if the process was swapped out.

If you want to find out how much swap your BEAM process is really using,
look at the smaps file of the process and sum up the "Swap:" fields.

For example:

ps -e | grep beam
 4726 pts/1    00:46:14 beam.smp

grep "Swap:" /proc/4726/smaps | awk '{swap = swap + $2} END {print swap}'

The output is in kilobytes.

man proc | grep -A 15 smaps

Regards,
Gustav Simonsson

Sent from my PC

----- Original Message -----
> From: "龙第九子" <>
> To: "Erlang-Questions" <>
> Sent: Monday, 16 July, 2012 10:02:21 AM
> Subject: [erlang-questions] Memory issue: big swap usage
> 
> Hi all,
> 
> Recently I wrote a service-monitoring program in Erlang. It uses
> httpc
> (the HTTP client shipped with Erlang/OTP) to fetch web server
> statistics data, does some calculations, and then sends results to
> another service. It works fine, however, the memory usage is very
> strange. While VmRSS stays at a reasonable level, but VmSize and
> VmData keep increasing (about 40m per day). Please look at the
> following data:
> 
> System memory usage:
> 
>     $ free -m
>                  total       used       free     shared    buffers
>                      cached
>     Mem:          2012       1486        525          0        216
>            713
>     -/+ buffers/cache:        557       1455
>     Swap:         2047          5       2041
> 
> 
> `top` shows that the beam.smp process consumes 51m physical memory :)
> and 857m swap memory :(
> 
>       PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP
>       COMMAND
>     27100 root      20   0  909m  51m 2288 S    2  2.6 149:54.65 857m
>     beam.smp
> 
> 
> Current VM status of the process:
> 
>     $ cat /proc/27100/status|grep Vm
>     VmPeak:      932260 kB
>     VmSize:      931616 kB
>     VmLck:           0 kB
>     VmHWM:       54624 kB
>     VmRSS:       52968 kB
>     VmData:      907556 kB
>     VmStk:          88 kB
>     VmExe:        1860 kB
>     VmLib:        2412 kB
>     VmPTE:         208 kB
> 
> 
> And Erlang reported memory usage (seems good):
> 
>     15> erlang:memory().
>     [{total,46487136},
>      {processes,1283144},
>      {processes_used,1251480},
>      {system,45203992},
>      {atom,509577},
>      {atom_used,497728},
>      {binary,169912},
>      {code,4395539},
>      {ets,323224}]
> 
> 
> I use Erlang R14B03 (erts-5.8.4) compiled with GCC 4.4.5 on Debian 6
> Linux 2.6.32-5-amd64. I'm not sure if there is a memory-leaking bug.
> The problem is too hard for me and I have no choice but to restart
> the
> process. Could someone be kind enough to help me out? Please.
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
> 



More information about the erlang-questions mailing list