Request for review: 8020530 Non heap memory size calculated incorrectly
David Holmes
david.holmes at oracle.com
Tue Aug 20 05:14:26 PDT 2013
On 20/08/2013 9:44 PM, Vladimir Kempik wrote:
> Hi all,
>
> Could I have a couple of reviews for this change?
>
> http://cr.openjdk.java.net/~vkempik/8020530/webrev.00/
>
> Running WebLogic server with 1.8.0 encounters this error:
>
> Caused by: java.lang.IllegalArgumentException: committed = 86482944
> should be < max = 50331648
>
> at java.lang.management.MemoryUsage.<init>(MemoryUsage.java:162)
>
> at sun.management.MemoryImpl.getMemoryUsage0(Native Method)
>
> at
> sun.management.MemoryImpl.getNonHeapMemoryUsage(MemoryImpl.java:75)
>
> ... 37 more
>
> There is a bug in jmm_GetMemoryUsage here -- if a memory region does not
> define a maximum size, then the total_max is not updated:
> if (u.max_size() == (size_t)-1) {
> has_undefined_max_size = true;
> }
> if (!has_undefined_max_size) {
> total_max += u.max_size();
> }
>
> It started with JDK version 1.8.0-ea-b97.
>
> In src/share/vm/services/management.cpp: jmm_GetMemoryUsage() there is
> next comment
>
> // if any one of the memory pool has undefined init_size or max_size,
> // set it to -1
>
> But code doing this is missing, so I've added the code to do exactly
> what comment says.
That doesn't make a lot of sense to me. Why would a pool have undefined
values? If a subset of pools have undefined values why report completely
fallacious values of -1?
It also isn't clear how this relates to the "committed" value in the
failure. What gets reported now?
Thanks,
David
> Thanks,
> Vladimir
>
More information about the hotspot-dev
mailing list