ris*_*p89 14 java java-8 metaspace
Java 8使用能够动态扩展的元空间.GC将在满足空间运行时运行.这是否意味着GC永远不会在元空间上运行?
我的Java 8应用程序使用了大量内存.我想知道运行时我的元空间大小是多少.我怎么做?
我正在考虑设置maxMetaSpace.我该怎么做呢?有什么建议?
gel*_*d0r 14
选项1:
执行
jstat -gc PID
Run Code Online (Sandbox Code Playgroud)
(将PID替换为要监视的JVM的PID)将返回...... 喜欢:
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
Run Code Online (Sandbox Code Playgroud)
根据这个兴趣是:
MC: Metaspace capacity (kB)
MU: Metaspace utilization (kB)
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,承诺大约181mb的Metaspace,而目前使用的是137mb.
选项2:
如果您启用了垃圾收集日志,您也可以从那里找到它,例如在应用程序崩溃或报告问题之后.搜索类似的行
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]
Run Code Online (Sandbox Code Playgroud)
这构成了在达到先前阈值时调整元空间的大小.
[Metaspace: 34904K->34904K(1081344K)], 0.1408610 secs]
Run Code Online (Sandbox Code Playgroud)
包含相关信息:在使用之前和之后使用了34,9mb.您可以找到的最新日志条目将显示当前大小(即:GC之后).
请记住,只要调整Metaspace的大小,就会运行完整的GC.因此,当您已经知道~21mb的默认值(取决于主机配置)不够时,最好为此配置一个良好的起始值.
请参阅此有关调整大小元空间的更多信息.
Jig*_*shi 10
for (MemoryPoolMXBean memoryMXBean : ManagementFactory.getMemoryPoolMXBeans()) {
if ("Metaspace".equals(memoryMXBean.getName())) {
System.out.println(memoryMXBean.getUsage().getUsed()/1024/1024 + " mb");
}
}
Run Code Online (Sandbox Code Playgroud)
是的,最好设置maxMetaspace,如果你认为它是漏洞来监控和修复它
| 归档时间: |
|
| 查看次数: |
12057 次 |
| 最近记录: |