While monitoring memory usage, an :ets.i revealed what is possibly a leak in my code. I have a GenServer named WexStore.RemoteJobScheduler which dynamically creats :dets files then closes them, typically in that fashion:
try do
:dets.open_file( :remote_write, [
{:file, to_charlist( job_path ) },
{:type, :set},
{:access, :read_write} ] )
:dets.insert :remote_write, { :from_node, from_node }
after
:dets.close :remote_write
end
And typically nothing shows up on :ets.i
But on production, after a while I see :ets entries where id is a ref, name is always “rules” and the owner is my GenServer. They don’t take much memory but I’m conscious of a limited number of :ets tables in the VM and after all I am not explicitly creating them.
iex(wex@wex_s1)1> :ets.i
id name type size mem owner
----------------------------------------------------------------------------
(....)
#Ref<0.3473999207.3311009794.192225> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3311534082.229174> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3311796225.222327> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3311796226.126516> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3312320514.142647> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3313106945.20359> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3313369090.106714> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3313631233.74447> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3313893377.227474> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3314941953.231154> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3315204097.185773> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3317039105.8236> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3317563394.94553> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3317825537.32266> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3317825538.130207> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
#Ref<0.3473999207.3319660545.180154> rules set 0 305 'Elixir.WexStore.RemoteJobScheduler'
I could not find information about this. Could any :ets expert shed some light on the meaning of these :ets entries?