首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 8在运行时查找元空间的大小

java 8在运行时查找元空间的大小
EN

Stack Overflow用户
提问于 2015-06-24 02:17:13
回答 3查看 18.4K关注 0票数 18

Java8使用能够动态扩展的元空间。当元空间满时,GC将在元空间上运行。这是否意味着GC永远不会在元空间上运行?

我的Java 8应用程序使用了大量内存。我想知道我的元空间在运行时的大小。我该怎么做?

我正在考虑设置MaxMetaspaceSize。我应该将它设置为什么?有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2016-04-07 17:09:47

选项1:

执行

代码语言:javascript
复制
jstat -gc PID

(用要监视的JVM的PID代替PID ),这将返回一些东西。像这样:

代码语言:javascript
复制
S0C      S1C       S0U   S1U     EC       EU        OC         OU        MC       MU       CCSC    CCSU       YGC   YGCT     FGC    FGCT    GCT
103936.0 107008.0  0.0   41618.3 820736.0 401794.3  444928.0   183545.7  181888.0 137262.8 28544.0 20386.6    313   16.024   8      3.706   19.729

根据感兴趣的this是:

代码语言:javascript
复制
MC: Metaspace capacity (kB)
MU: Metaspace utilization (kB)

因此,在这种情况下,提交了大约181mb的Metaspace,而目前使用了137mb。

选项2:

如果你启用了垃圾收集日志,你也可以从那里发现这一点,例如,在应用程序已经崩溃或报告了问题之后。搜索像这样的行

代码语言:javascript
复制
2016-04-06T01:50:04.842+0200: 7.795: [Full GC (Metadata GC Threshold)
[PSYoungGen: 7139K->0K(177152K)]
[ParOldGen: 18396K->22213K(101888K)] 25535K->22213K(279040K), 
[Metaspace: 34904K->34904K(1081344K)], 0.1408610 secs]
[Times: user=0.45 sys=0.00, real=0.14 secs]

当达到之前的阈值时,这构成了Metaspace的大小调整。

代码语言:javascript
复制
[Metaspace: 34904K->34904K(1081344K)], 0.1408610 secs]

包含相关信息:在GC之前和之后都使用了34,9mb。您可以找到的这些日志条目中的最新条目将显示当前大小(即GC之后)。

请记住,只要调整Metaspace的大小,就会运行完整的GC。因此,当您已经知道~21mb的默认值(取决于主机配置)还不够时,最好为此配置一个好的起始值。

有关调整元空间大小的详细信息,请参阅this

票数 21
EN

Stack Overflow用户

发布于 2015-06-24 02:20:52

代码语言:javascript
复制
for (MemoryPoolMXBean memoryMXBean : ManagementFactory.getMemoryPoolMXBeans()) {
    if ("Metaspace".equals(memoryMXBean.getName())) {
            System.out.println(memoryMXBean.getUsage().getUsed()/1024/1024 + " mb");
    }
}

是的,如果你认为监控和修复MaxMetaspaceSize有漏洞,最好设置它。

票数 16
EN

Stack Overflow用户

发布于 2017-04-14 06:00:51

使用jcmd。它是Java 8中最好的内置oracle工具,用来查找这些东西。

注意:您需要以启动java进程的任何用户的身份运行jcmd。如果您正在调试像Jetty这样的with服务器,您可能需要使用像sudo su jetty这样的东西来更改用户。

  1. 运行为应用程序显示的PID,然后运行jcmd <pid> VM.native_memory

这有

运行jcmd <pid> help获取更多选项的

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31010463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档