Fl4m3Ph03n1x
How to configure extra_application in elixir?
Background
I have an app that checks the machine’s memory usage using :memsup.get_memory_data/0 before proceeding with an operation. If said memory usage is too high, I just refuse to do the operation.
Problem
Now, according to the documentation, :memsup.get_memory_data asks the machine how much memory it has allocated every X time. By default X is 60 minutes. This is wwaaaayyy too long.
There is a way to configure it using :memsup.set_check_interval/1 but the new interval I pass only takes effect after the first check, so it means that if I start the app and then use :memsup.set_check_interval(1) to check the memory every minute, I will have to wait 60 minutes before I start checking the memory every minute like I want. What’s even worst, is that if the application or process is restarted, I go back to waiting 60 minutes again because any changes using this function are not persisted.
Code
So in order to use :memsup you need to include os_mon into your extra_applications mix.exs file:
def application do
[
extra_applications: [:logger, :runtime_tools, :os_mon],
mod: {MyApp.Application, []}
]
end
However, this doesn’t tell me how I can configure the os_mon app, and reading the erlang documentation lead me to this config page which only confused me further.
I was hopping to see something simple, like changing my config.exs file but I found no information regarding it.
Question
How do I configure os_mon on startup, so its memory check interval is 1 minute instead of 60?
Marked As Solved
peerreynders
Don’t know.
As far as I can tell sys.config would need something like
{os_mon, [{memory_check_interval, 5}]}
So according to this
config :os_mon,
memory_check_interval: 5
via the config.exs (or any file it references).
At least that would be my starting point …
In any case - the fact that set_check_interval/1 takes minutes but get_check_interval/0 returns ms is confusing.







