为什么 NativeMemoryTracking 和 jstat 的堆内存不相似?

问题描述 投票:0回答:0

我有一个在使用 Apache Arrow(它使用 Netty Direct Buffers)的 ec2 Linux 机器上运行的程序。为了跟踪应用程序的内存占用,我启动了带有 -XX:NativeMemoryTracking=detail 标志的应用程序。但是,我想知道通过我的应用程序使用的实际堆和本机内存大小。

本机内存命令报告堆为 6603264KB(约 6.6 GB)

./jcmd 10452 VM.native_memory 10452:

Native Memory Tracking:

Total: reserved=35266139KB, committed=9159163KB
-                 Java Heap (reserved=31455232KB, committed=6603264KB)
                            (mmap: reserved=31455232KB, committed=6603264KB)

-                     Class (reserved=1228346KB, committed=200762KB)
                            (classes #28356)
                            (malloc=28218KB #54819)
                            (mmap: reserved=1200128KB, committed=172544KB)

-                    Thread (reserved=177550KB, committed=177550KB)
                            (thread #173)
                            (stack: reserved=176652KB, committed=176652KB)
                            (malloc=583KB #1032)
                            (arena=315KB #329)

-                      Code (reserved=270981KB, committed=128049KB)
                            (malloc=21381KB #28737)
                            (mmap: reserved=249600KB, committed=106668KB)

-                        GC (reserved=1176911KB, committed=1092419KB)
                            (malloc=27699KB #652)
                            (mmap: reserved=1149212KB, committed=1064720KB)

-                  Compiler (reserved=539KB, committed=539KB)
                            (malloc=393KB #2262)
                            (arena=145KB #18)

-                  Internal (reserved=914087KB, committed=914087KB)
                            (malloc=914055KB #37848)
                            (mmap: reserved=32KB, committed=32KB)

-                    Symbol (reserved=34554KB, committed=34554KB)
                            (malloc=32021KB #331168)
                            (arena=2533KB #1)

-    Native Memory Tracking (reserved=7717KB, committed=7717KB)
                            (malloc=472KB #6734)
                            (tracking overhead=7245KB)

-               Arena Chunk (reserved=222KB, committed=222KB)
                            (malloc=222KB)

如果我使用 jstat -gc 命令,我会得到以下响应。我猜堆大小应该等于 S0U + S1U + EU + OU,大约 400 MB。

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
64000.0 107008.0  0.0   106996.4 3709952.0 46904.7  2561536.0   208158.7  172544.0 165373.0 20992.0 19836.9     17    0.479   6      0.667    1.146

现在的问题是,为什么两个命令之间有如此巨大的差异,我如何才能找到当前使用的堆大小?

java heap-memory heap-dump jcmd
© www.soinside.com 2019 - 2024. All rights reserved.