RFR(xs): 8149405: OOM Error running java/lang/invoke/MethodHandlesTest.java on windows-x86

Derek White derek.white at oracle.com
Wed Mar 23 21:02:38 UTC 2016


On 3/23/16 4:10 PM, Jon Masamitsu wrote:
> On 03/23/2016 11:59 AM, Derek White wrote:
>> Hi Jon,
>>
>> On 3/23/16 2:12 PM, Jon Masamitsu wrote:
>>> Derek,
>>>
>>> http://cr.openjdk.java.net/~drwhite/8149405/webrev.01/src/share/vm/oops/methodData.cpp.udiff.html
>>>
>>>>   void MethodData::clean_method_data(BoolObjectClosure* is_alive) {
>>>> + ResourceMark rm;
>>>>     for (ProfileData* data = first_data();
>>>>          is_valid(data);
>>>>          data = next_data(data)) {
>>>>       data->clean_weak_klass_links(is_alive);
>>>>     }
>>>
>>> The clean_weak_klass_links() above has a ResourceMark in it.
>>>
>>>> void DataLayout::clean_weak_klass_links(BoolObjectClosure* cl) {
>>>>   ResourceMark m;
>>>>   data_in()->clean_weak_klass_links(cl);
>>>> }
>>>
>>> It's not clear to me where space is being allocated in 
>>> clean_method_data() so
>>> that the ResourceMark helps.  My understanding of ResourceMarks is thin
>>> so don't assume there is anything deep about this question.
>>>
>>> Jon
>>>
>> You're right, it isn't clear where space is being allocated without 
>> doing detective work. I didn't see any conventions w.r.t 
>> documentation, naming, type signatures, etc that would help.
>
> Right.  I don't have any ideas either.  Just out of curiosity, did you
> try Native-Memory-Tracking with any enlightening results?

I did try NMT. I never got it to run in a reproduced failure. And I 
struggled to see any real issues when I captured some logs in 
non-failing tests. Could it be, because this was a temporary memory 
spike, that NMT didn't show the "high-water mark", but the currently 
used memory? Neither the "arena" subsections or the "Arena Chunk" 
section show that much use.
Here's a subset of the data:

Native Memory Tracking 	
	

	Reserved 	Committed
Total 	1053487 	136079
*- Java Heap * 	716800 	65536
mmap 	716800 	65536

	
	
*- Class * 	7672 	7416
classes 	1691 	
malloc 	120 	1224
mmap 	7552 	7296

	
	
*- Thread * 	37798 	37798
thread 	80 	
stack 	35840 	35840
malloc 	135 	451
arena 	1824 	159

	
	
*- Code * 	248817 	8529
malloc 	1073 	43760
mmap 	247744 	7456

	
	
*- GC * 	30344 	6152
malloc 	3336 	964
mmap 	27008 	2816

	
	
*- Compiler * 	264 	264
malloc 	5 	61
arena 	260 	4

	
	
*- Internal * 	4736 	4736
malloc 	4672 	2596
mmap 	64 	64

	
	
*- Symbol * 	2187 	2187
malloc 	1124 	6039
arena 	1064 	1

	
	
*- Native Memory Tracking * 	547 	547
malloc 	97 	2010
tracking overhead 	450 	

	
	
*- Shared class space * 	2 	2
malloc 	2 	1

	
	
*- Arena Chunk * 	2908 	2908
malloc 	2908 	

	
	
*- Logging * 	1 	1
malloc 	1 	96

	
	
*- Unknown * 	1408 	0
mmap 	1408 	0

>
>
>>
>> The problem is that the iterators first_data()/next_data() allocate 
>> also, as well as other functions called further down: 
>> parameters_type_data(), clean_extra_data(), clean_extra_data().
>
> I think the change itself is correct and reasonable given the
> circumstances.
>
> Reviewed.
>
> Jon
>

Thanks Jon!

>>
>>  - Derek
>>> On 03/23/2016 08:02 AM, Derek White wrote:
>>>> This is a very small fix that adds ResourceMarks to 
>>>> MethodData::clean_method_data() (and two similar functions nearby).
>>>>
>>>> Basically an iteration over all classes in all methods in all 
>>>> classes was occurring in one ResourceMark during a full gc, so we 
>>>> occasionally ran out of malloc space.
>>>>
>>>> Once again, x86 builds running on Win64 are the "canary in the coal 
>>>> mine" for these kinds of temp. memory leaks, so it's a great test 
>>>> case even if not a very realistic one!
>>>>
>>>> BUG: https://bugs.openjdk.java.net/browse/JDK-8149405
>>>> WEBREV: http://cr.openjdk.java.net/~drwhite/8149405/webrev.01/
>>>> TESTS: jprt
>>>>
>>>> Thanks for looking,
>>>>
>>>>  - Derek
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20160323/2aabd0d4/attachment.htm>


More information about the hotspot-gc-dev mailing list