Fl4m3Ph03n1x
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
:memsupeven work? - Why are the values
:memsupgives me so different? - Why is BEAM using over 90% of the total memory if all I have is a simple
iexshell session open? - Is there a reliable way to know if my machine is struggling with memory?
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixir-ls
- #ai
- #elixirconf-us
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 4- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
hauleth
So it is possible that the issue is that your check ran in the past and since then it wasn’t updated. Additionally
memsupreturns memory usage for whole machine not just BEAM environment.Fl4m3Ph03n1x
According to my understanding,
:mem_supchecks the memory every minute by default. Indeed, if I close myiexsession and return 5 minutes later, I see a different value from total usage, but not one that diverges significantly from the 95% I got before.And no, I am not using 95% of the entire memory my machine has available, htop and other tools confirm it.
peerreynders
I wonder if the numbers seem off because
totalreports physical memory whileallocatedincludes(?) cached memory.memsupseems to be designed to pinpoint individual processes that are heavy memory users - the rest of the functionality seems to just report information reported by the OS.You may want to look into recon (possibly via one of the Elixir wrappers) - see page 41 of Erlang in Anger
spencerdcarlson
To piggy back off of this, it looks like recon_alloc:memory/1 has the answers.