As a light experiment, to isolate garbage collection, I ran this:<br><br>4> memory().<br>[{total,367371832},<br> {processes,139434000},<br> {processes_used,139430112},<br> {system,227937832},<br> {atom,514765},<br> {atom_used,488348},<br>
{binary,157628784},<br> {code,3880064},<br> {ets,64744732}]<br><br>(rabbit@vs-dfw-ctl11)5> [erlang:garbage_collect(P) || P <- erlang:processes()].<br>[true,true,true,true,true,true,true,true,true,true,true,<br> true,true,true,true,true,true,true,true,true,true,true,true,<br>
true,true,true,true,true,true|...]<br><br>(rabbit@vs-dfw-ctl11)6> memory(). <br>[{total,145833144},<br> {processes,50900752},<br> {processes_used,50896864},<br> {system,94932392},<br>
{atom,514765},<br> {atom_used,488348},<br> {binary,24622512},<br> {code,3880064},<br> {ets,64745716}]<br><br>This really cut down on usage, so its likely that the binary gc is falling behind rabbits requirements. How do I track down the uncollected binary heap usage to a process?<br>
<br>_steve<br><br><div class="gmail_quote">On Thu, Oct 22, 2009 at 1:50 PM, Stephen Day <span dir="ltr"><<a href="mailto:sjaday@gmail.com">sjaday@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Unfortunately, the system has crashed since the last outputs I provided, but the behavior remains. There definitely seems to be some memory held up in the persister, but I dont think this is the main source. Below, I printed out the memory for the process, gc'd it, then printed it again:<br>
<br>1> process_info(whereis(rabbit_persister)).<br>[{registered_name,rabbit_persister},<br> {current_function,{gen_server2,process_next_msg,8}},<br> {initial_call,{proc_lib,init_p,5}},<br> {status,waiting},<br> {message_queue_len,0},<br>
{messages,[]},<br> {links,[<0.76.0>,<0.188.0>]},<br> {dictionary,[{'$ancestors',[rabbit_sup,<0.75.0>]},<br> {'$initial_call',{rabbit_persister,init,1}}]},<br> {trap_exit,true},<br>
{error_handler,error_handler},<br> {priority,normal},<br> {group_leader,<0.74.0>},<br> {total_heap_size,43398670},<br> {heap_size,5135590},<br> {stack_size,13},<br> {reductions,128289510},<br> {garbage_collection,[{fullsweep_after,65535},<br>
{minor_gcs,49}]},<br> {suspending,[]}]<br>2> garbage_collect(whereis(rabbit_persister)).<br>true<br>3> process_info(whereis(rabbit_persister)). <br>[{registered_name,rabbit_persister},<br> {current_function,{gen_server2,process_next_msg,8}},<br>
{initial_call,{proc_lib,init_p,5}},<br> {status,waiting},<br> {message_queue_len,0},<br> {messages,[]},<br> {links,[<0.76.0>,<0.188.0>]},<br> {dictionary,[{'$ancestors',[rabbit_sup,<0.75.0>]},<br>
{'$initial_call',{rabbit_persister,init,1}}]},<br> {trap_exit,true},<br> {error_handler,error_handler},<br> {priority,normal},<br> {group_leader,<0.74.0>},<br> {total_heap_size,987},<br> {heap_size,610},<br>
{stack_size,13},<br> {reductions,133572480},<br> {garbage_collection,[{fullsweep_after,65535},{minor_gcs,6}]},<br> {suspending,[]}]<br><br>So, even the though this collected quite a bit of memory, we can see that the binary allocation is still large:<br>
<br>4> memory().<br>[{total,906056008},<br> {processes,72681252},<br> {processes_used,72668564},<br> {system,833374756},<br> {atom,515733},<br> {atom_used,490081},<br> {binary,769103232},<br> {code,3890441},<br> {ets,58694668}]<br>
<br>Is there a way I can print the allocators for this binary memory?<br><font color="#888888"><br>-Stephen<br>
</font></blockquote></div><br>