Re: [gui-dev] Chasing possible memory leaks?

Sam Berlin <[email protected]> Thu, 19 Aug 2004 16:58:00 -0400
Newsgroups gmane.network.gnutella.limewire.gui.devel
Message-ID <[email protected]>
Hi Philippe,

If you could resend this patch and explain where the optimizations are 
that will reduce our memory problems, we'll take a much closer look at 
it.

Thanks much,
  Sam

On Thursday, August 19, 2004, at 04:50  PM, Philippe Verdy wrote:

> From: "Jens-Uwe Mager" <[email protected]>
>> While running as an ultrapeer my machines appear to go out of memory
>> somehow. I did a few runs with -Xrunhprof:heap=sites and I have a few
>> questions if that memory usage is about to be expected. The top 
>> entries
>> in the list of hot sites are these:
>>
>> SITES BEGIN (ordered by live bytes) Wed Aug 18 13:22:34 2004
>>           percent         live       alloc'ed  stack class
>>  rank   self  accum    bytes objs   bytes objs trace name
>>     1 11.41% 11.41% 11428008 1214 22449936 11149 60808 [J
>>     2  5.67% 17.08%  5676336 114744 6247840 125345 60656 [C
>>     3  2.54% 19.63%  2545920 6120 2589184 6224 56176 java.lang.Object
>>     4  2.54% 22.17%  2545920 6120 2589184 6224 56299 java.lang.Object
>>     5  2.54% 24.71%  2545920 6120 2589184 6224 56171 java.lang.Object
>>     6  2.54% 27.26%  2545920 6120 2589184 6224 56181 java.lang.Object
>>     7  2.43% 29.69%  2435648 29614 2576640 31128 51089 [C
>>     8  2.37% 32.06%  2374104 98921 2602368 108432 60620 
>> java.lang.String
>>     9  1.93% 33.99%  1930240 4640 1970176 4736 59661 java.lang.Object
>>    10  1.93% 35.92%  1930240 4640 1970176 4736 59636 java.lang.Object
>>    11  1.93% 37.85%  1930240 4640 1970176 4736 59646 java.lang.Object
>>    12  1.93% 39.77%  1930240 4640 1970176 4736 59641 java.lang.Object
>>
>> The first entry appears to relate to this stack trace:
>>
>> TRACE 60808:
>>         
>> com.limegroup.gnutella.util.BitSet.ensureCapacity(BitSet.java:140)
>
> I know that, and I have submitted a patch to the QRP table handling 
> classes
> several months ago.
> The problem is that, despite QRP tables should have a fixed size, 
> which is
> known immediately after the Reset message has been received, it won't 
> evolve
> again. Applying patches later will mean that the underlying Bitset 
> will grow
> progressively, causing lots of reallocations (and lots of dead long[]
> objects as seen above).
>
> However I don't know what happened to the patch I submitted then, 
> which also
> contained an faster, fully pipelined, version of the patch message 
> decoder
> and decompressor, that almost always avoid the creation of intermediate
> buffers.
>
> I have reworked it since then locally, but may be I should resend it. I
> know, with my version, that there are still leaf nodes trying to inject
> 1Megabit QRP tables to us, and that this still breaks when computing 
> merged
> 64Kbit QRP tables for UP-to-UP QRP routing: apparently this is a
> synchronization problem between the connection threads that receive and
> decode the QRP tables from leaves, and the thread that updates the 
> merged
> QRP table for sending patches to other UP: in some case the source 
> table is
> not resized as it should.
>
> Also, when resizing tables to 64K, we unnecessarily reallocate it each 
> time
> for each source leaf connection. This is not necessary, and a single 
> work
> 64K table should be enough to compute the merged version on the fly. 
> This is
> really inefficient, and it is effectively the main cause of dead 
> objects in
> the VM when running as an UltraPeer with lots of leaf connections.
>
> _______________________________________________
> gui-dev mailing list
> [email protected]
> http://www.limewire.org/mailman/listinfo/gui-dev
>

_______________________________________________
gui-dev mailing list
[email protected]
http://www.limewire.org/mailman/listinfo/gui-dev