<p>Either the problem is in Erlang code, or it's a leak at a lower level. The erlang:memory() numbers seem to indicate the latter.<br>
If it's a low-level issue, then a leak detector like libumem(?) or Valgrind might be of some use.<br>
It may be an idea to check if the number of ports is stable, and whether it helps matters if you do the work in a short-lived process. Other than that, I guess the issue may be hard to tackle from within Erlang itself.<br>

</p>
<div class="gmail_quote">Den 16/07/2012 10.02 skrev "ÁúµÚ¾Å×Ó" <<a href="mailto:physacco@gmail.com" target="_blank">physacco@gmail.com</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

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