Background
I am testing an application where I perform some actions depending on the amount of memory the machine has free. To supervise the machine’s memory I am using :memsup.get_memory_data/0 but I am getting some really weird results.
Problem
I am have a machine with 8GB of RAM, which should be more than enough for opening iex
and doing some tests. However, :memsup
always returns absurd results like the following:
iex(9)> {total, allocated, _worse} = :memsup.get_memory_data()
{8235098112, 7862636544, {#PID<0.118.0>, 372944}}
iex(10)> (allocated / total) * 100
95.47714474151489
No matter what I do, I always have :memsup
report BEAM is using up to 95% of my machine’s memory. All I have open is a single session of iex
that I am using as a playground.
What’s even more weird is that htop
returns me a completely different value of memory usage, stating I am using 6.22GB out of 7.67GB, which still doesn’t hold up to 95% usage…
(6.22 / 7.67) * 100
81.09517601043025
Questions
So now I have some questions:
- Does
:memsup
even work? - Why are the values
:memsup
gives me so different? - Why is BEAM using over 90% of the total memory if all I have is a simple
iex
shell session open? - Is there a reliable way to know if my machine is struggling with memory?