Hi Daniel - It seems like you are using a different supervisor than the one provided in stdlib. Or maybe a patched version of it - if so, do you know which version it is based on?<br><br>There has been problems with memory consumption in simple_one_for_one supervisors with *many* children earlier, but that has been fixed already a few releases ago.<br>
<br>Regards<br>/siri@otp<br><br><br><div class="gmail_quote">2012/12/27 Daniel Barney <span dir="ltr"><<a href="mailto:dan353hehe@gmail.com" target="_blank">dan353hehe@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Hey Guys,<br>
<br>
This is what I am running into, I have a supervisor which manages a<br>
bunch of processes that are each in charge of a gen_tcp or ssl socket.<br>
After upgrading to R15B02 i started noticing that memory usage was<br>
growing slowly and over the course of three days I found that the<br>
machines were starting to run out of memory. I do not remember which<br>
version we upgraded from, but it was from last year. I can check if it<br>
is really needed.<br>
<br>
We upgraded to R15B02, wrote a small patch and then we cherry-picked<br>
it onto the stable version. The patch shouldn't be affecting what I am<br>
seeing as I only changed two files in the SSL application, relating to<br>
parsing certs that do not obey the standard.<br>
<br>
So assuming that i had a memory leak somewhere i first checked to see<br>
if any processes were using large amounts of memory, and this is what<br>
I found:<br>
<br>
<0.785.0>             supervisor:cowboy_requests_sup/1   8024355 15270185    0<br>
                      gen_server:loop/6                        9<br>
<br>
This processes was a supervisor so i checked how many children that it<br>
had, and this is what i got back:<br>
<br>
supervisor:count_children(Pid).<br>
[{specs,1},{active,80},{supervisors,0},{workers,6782028}]<br>
<br>
<br>
And then general process information:<br>
<br>
erlang:process_info(Pid).<br>
[{current_function,{gen_server,loop,6}},<br>
 {initial_call,{proc_lib,init_p,5}},<br>
 {status,waiting},<br>
 {message_queue_len,0},<br>
 {messages,[]},<br>
 {links,[<0.783.0>]},<br>
 {dictionary,[{'$ancestors',[<0.783.0>,cowboy_sup,<0.544.0>]},<br>
              {'$initial_call',{supervisor,cowboy_requests_sup,1}}]},<br>
 {trap_exit,true},<br>
 {error_handler,error_handler},<br>
 {priority,normal},<br>
 {group_leader,<0.543.0>},<br>
 {total_heap_size,67810415},<br>
 {heap_size,8024355},<br>
 {stack_size,9},<br>
 {reductions,1551847476},<br>
 {garbage_collection,[{min_bin_vheap_size,46368},<br>
                      {min_heap_size,233},<br>
                      {fullsweep_after,65535},<br>
                      {minor_gcs,31155}]},<br>
 {suspending,[]}]<br>
<br>
erlang:process_info(Pid,memory).<br>
{memory,542484248}<br>
<br>
and this is how many processes i have on the machine:<br>
length(processes()).<br>
588<br>
<br>
so all of the workers for this supervisor are dead. but it doesn't<br>
think so for some reason?<br>
<br>
Is there any reason why a supervisor would hold onto 6.7 million<br>
workers that are already dead?<br>
<br>
Any help would be appreciated,<br>
Daniel<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br>