相关疑难解决方法(0)

为什么JVM报告的内存比linux进程驻留集大小更多?

在运行启用了本机内存跟踪的Java应用程序(在YARN中)时(-XX:NativeMemoryTracking=detail请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.htmlhttps:// docs. oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html),我可以看到JVM在不同类别中使用了多少内存.

我在jdk 1.8.0_45上的应用程序显示:

Native Memory Tracking:

Total: reserved=4023326KB, committed=2762382KB
-                 Java Heap (reserved=1331200KB, committed=1331200KB)
                            (mmap: reserved=1331200KB, committed=1331200KB) 

-                     Class (reserved=1108143KB, committed=64559KB)
                            (classes #8621)
                            (malloc=6319KB #17371) 
                            (mmap: reserved=1101824KB, committed=58240KB) 

-                    Thread (reserved=1190668KB, committed=1190668KB)
                            (thread #1154)
                            (stack: reserved=1185284KB, committed=1185284KB)
                            (malloc=3809KB #5771) 
                            (arena=1575KB #2306)

-                      Code (reserved=255744KB, committed=38384KB)
                            (malloc=6144KB #8858) 
                            (mmap: reserved=249600KB, committed=32240KB) 

-                        GC (reserved=54995KB, committed=54995KB)
                            (malloc=5775KB #217) 
                            (mmap: reserved=49220KB, committed=49220KB) 

-                  Compiler (reserved=267KB, committed=267KB)
                            (malloc=137KB #333) 
                            (arena=131KB #3)

-                  Internal (reserved=65106KB, committed=65106KB)
                            (malloc=65074KB …

linux memory jvm hadoop-yarn

28
推荐指数
1
解决办法
8234
查看次数

Java内存使用率远高于堆+非堆

我有一个带有 SpringBoot 版本 2.1.1.RELEASE 的 Java 应用程序(oracle JDK 8u191),我遇到了奇怪的内存使用情况(不认为这与 spring 相关)。

应用程序提供的 HEAP 和 NONHEAP 值的总和远低于 Docker 报告的实际内存使用情况。

我知道 Java 具有除 HEAP 和 NONHEAP 之外的其他内存区域,但我不知道如何衡量它们以及当前行为是否正常。

目前,我的应用程序报告以下内容(在生产中运行 3 天后):

           Init       Used       Committed       Max       
HEAP:      250M       79M        250M            800M      
NONHEAP:   2M         192M       201M            0M     
Run Code Online (Sandbox Code Playgroud)

/metricsspringBoot的执行器端点报告相同的内存使用情况。

但是 docker stats 命令报告了这一点(容器内部smem报告了与 java 进程相同的值):

MEM USAGE / LIMIT
750.2MiB / 1.172GiB
Run Code Online (Sandbox Code Playgroud)

堆+非堆和当前使用的内存的区别是299,2mb

在我们第一次将这项服务投入生产时,我没想到会有 300mb,这导致了很多 OOM,直到我们找到了正确的配置。

即使在 GC 之后,这种“未注册的内存使用量”似乎只会增加而不会减少。

如果我重新启动应用程序,堆+非堆与实际使用之间的差异约为 100mb。

我的 Dockerfile 以这种方式启动应用程序:

ENTRYPOINT ["java", "-Xms250m", "-Xmx800m", "-XX:+UseG1GC", "-Djava.security.egd=file:/dev/./urandom", "-jar", …

java memory heap-memory docker spring-boot

6
推荐指数
0
解决办法
1242
查看次数

Jvm 使用的内存比 Native Memory Tracking 说的多,我如何定位额外内存的去向?

我在我的网络服务器上运行码头。我当前的 jvm 设置:-Xmx4g -Xms2g,但是码头使用了更多的内存,我不知道这些额外的内存去哪里了。

Jetty 总共使用 4.547g 内存:

在此处输入图片说明

heap usage 显示 2.5g 时的堆内存使用情况:

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 483196928 (460.8125MB)
   used     = 277626712 (264.76546478271484MB)
   free     = 205570216 (196.04703521728516MB)
   57.45622455612963% used
Eden Space:
   capacity = 429522944 (409.625MB)
   used     = 251267840 (239.627685546875MB)
   free     = 178255104 (169.997314453125MB)
   58.4992824038755% used
From Space:
   capacity = 53673984 (51.1875MB)
   used     = 26358872 (25.137779235839844MB)
   free     = 27315112 (26.049720764160156MB)
   49.109214624351345% used
To Space:
   capacity = 53673984 (51.1875MB)
   used     = 0 (0.0MB)
   free     = …
Run Code Online (Sandbox Code Playgroud)

jvm memory-leaks

5
推荐指数
0
解决办法
660
查看次数