Native Memory Tracking Bug

Zhengyu Gu zgu at redhat.com
Thu Nov 14 20:33:16 UTC 2019



On 11/14/19 1:06 PM, Jacob Schlather wrote:
> Upon further investigation it appears that NMT is not accurately 
> tracking the memory usage of the JVM. I ran NMT summary and got the 
> following output
> 
> Total: reserved=9095231KB, committed=8746919KB
> 
> And then I ran pmap on the host to check memory usage
> 
> sudo pmap -x 89186 | tail -n 1
> total kB        34497556 9397564 9352480
> 
> Is this sort of gap expected?

Sorry, I was preoccupied by tracking bug.

As the memory gap, it really depends on individual application.

For example, if it has jni methods that allocate a lot memory outside of 
JVM? How many sockets it opens, given each socket may have buffer(s) 
associating with it, etc.

The NMT output, you posted on github, shows 700+ threads, each thread 
may have per-thread malloc pool, that is managed by c library and not 
tracked by NMT, that can add up significant amount of memory.

-Zhengyu







> 
> 
> On Thu, Nov 14, 2019 at 12:18 PM Jacob Schlather <jschlather at hubspot.com 
> <mailto:jschlather at hubspot.com>> wrote:
> 
>     Hi Zhengyu,
> 
>     This bug seems to happen every time for one of our web services
>     running in production, but it doesn't happen in qa, so I don't think
>     I'll be able to provide a reproducer. If there are some lightweight
>     debugging options we could turn on and provide that output to you, I
>     could do that.
> 
>     Having dug into the memory issue we're seeing, what it looks like is
>     that in Java 8 the committed memory as shown by NMT is significantly
>     less than the memory the JVM was actually using. Now on Java 11, the
>     JVM seems to be using much closer to the committed memory. Do you
>     happen to know of anything we could look into for that? Thanks.
> 
>     On Wed, Nov 13, 2019 at 10:14 PM Zhengyu Gu <zgu at redhat.com
>     <mailto:zgu at redhat.com>> wrote:
> 
>         Hi Jacob,
> 
>         It looks like JDK-8204128 [1] strikes again. It would be very
>         helpful if
>         you can provide a reproducer.
> 
>         Thanks,
> 
>         -Zhengyu
> 
> 
>         [1] https://bugs.openjdk.java.net/browse/JDK-8204128
> 
> 
>         On 11/13/19 9:56 PM, Jacob Schlather wrote:
>          > We're currently in the process of upgrading our Java
>         applications from Java
>          > 8 to Java 11. After deploying some of our production
>         applications with Java
>          > 11, we began to see the resident memory size grow without
>         bound until our
>          > orchestrator killed the applications for excessive memory
>         usage. We've
>          > started to debug this issue, but noticed that the NMT output
>         appears to be
>          > incorrect. In particular the Compiler section is displaying
>          >
>          > Compiler (reserved=4528KB +1010KB, committed=4528KB +1010KB)
>          > (malloc=4896KB +1206KB #4132 +508)
>          > (arena=18014398509481617KB -196 #5)
>          >
>          > Obviously the arena value here is quite wrong and there's no
>         way the
>          > reserved memory can be less than the malloc memory. Further
>         there's
>          > a 276305KB gap in the RSS size reported by our metrics and
>         the amount of
>          > memory NMT reports as committed. Here's our JVM args and JDK
>         version, I've
>          > additionally attached the full output of the NMT detailed diff.
>          >
>          > Running java11 with JVM arguments:
>         -Djava.net.preferIPv4Stack=true
>          > -Xms6144m -Xmx6g -Xss256k -XX:MetaspaceSize=128m
>          > -XX:MaxMetaspaceSize=256m -XX:CompressedClassSpaceSize=128m
>          > -XX:+UseG1GC -XX:MaxGCPauseMillis=350
>         -XX:+UnlockExperimentalVMOptions
>          > -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=45
>          > -XX:ParallelGCThreads=8 -XX:ConcGCThreads=6
>          > -XX:InitiatingHeapOccupancyPercent=35 -XX:+PerfDisableSharedMem
>          > -XX:-UseBiasedLocking -XX:G1HeapRegionSize=4m
>          > -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs
>          > -Djava.io.tmpdir=REDACTED -XX:+ExitOnOutOfMemoryError
>          > -XX:-OmitStackTraceInFastThrow
>          >
>         -javaagent:/usr/local/appoptics-6.5.1/appoptics-agent.jar=config=appoptics-agent.json
>          > -XX:-PreferContainerQuotaForCPUCount
>         -XX:NativeMemoryTracking=detail
>          > -jar REDACTED
>          > openjdk version "11.0.5" 2019-10-15
>          > OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10)
>          > OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed
>         mode)
>          >
> 



More information about the hotspot-dev mailing list