Incorrect Memory Usage Reported When Using ZGC + sun.misc.Unsafe

Erik Österlund erik.osterlund at oracle.com
Fri Jan 4 09:13:34 UTC 2019


Hi Alex,

Unfortunately, attachments to the mailing list get eaten by the evil 
mail server monster. So I can't see any of the attachments you mentioned.

Having said that, the kernel is known to be pretty bad at accounting 
resident memory when using multi-mapping. ZGC multi-maps the Java heap, 
so that there are multiple virtual addresses for the same physical 
memory. Unfortunately, the kernel doesn't get that it is indeed the same 
physical memory, and messes up in the accounting. That is most likely 
why you are seeing weird numbers for resident memory used.

If you are curious about how much memory is actually being used, I think 
you are better off checking that using NMT. For more information, please 
consult the following documentation:
https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html

Hope this helps.

/Erik

On 2019-01-04 02:22, Alex Elent wrote:
> Hello,
>
> Looking for some help on an issue we are experiencing exclusively with ZGC.
> I'm unsure if the problem lies with ZGC or the kernel or where. Looking for
> your experienced guidance if possible.
>
> We experienced this in our actual application but I managed to create a
> simpler reproducible case.
>
> I've attached the example Java file (TestUnsafe.java).
> I've attached a screenshot of top reporting 108% resident memory used.
>
> This is running on an EC2 t2.medium instance (2 vCPU / 4GB RAM).
>
> I compile with:
> javac -cp . TestUnsafe.java
>
> I run with:
> java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms3500M -Xmx3500M -cp .
> TestUnsafe
>
> Thank you so much for your help!



More information about the zgc-dev mailing list