[erlang-questions] Memory usage in OTP 21

Devon Estes devon.c.estes@REDACTED
Thu Jul 19 00:36:58 CEST 2018


Hey everyone,

First off, I would like to apologize for the following code example in
Elixir - it's the language I know best, and where we're having the problem.

Anyway, I'm one of the maintainers of an Elixir benchmarking tool called
Benchee. A few months ago we added memory measurement as a feature in our
benchmarking tool. However, with the release of OTP 21, we're seeing some
measurements that seem very strange. For example, according to our
measurements, the following function uses 0 bytes of memory:
`Enum.to_list(1..10)`. On OTP 20, this always uses between 350-380 byes
depending on the platform. There are a few other instances of these kinds
of functions which we believe should be using memory somewhere, but the
results that we get back from our measurements say they are not using any
memory, and all of them are around functions that in OTP 20 used very
little memory. We are also seeing somewhat frequently what appears to be
_negative_ net memory usage, which again seems really strange.

So, is this some sort of optimization that we're missing, or is there
somewhere else (maybe in a heap fragment?) that these structures might be
stored? And if they are somewhere else, is it possible to measure this
memory usage?

At the moment we're measuring memory usage by using `erlang:trace/3` to
listen to the garbage collection events, and calculate the used memory from
there, and adding any remaining used memory on the heap at the end of the
function (after the last GC run).

Thanks again for any help y'all might be able to offer!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180718/34055723/attachment.htm>


More information about the erlang-questions mailing list