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>