首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coldfusion元空间为空

Coldfusion元空间为空
EN

Stack Overflow用户
提问于 2018-04-18 00:17:46
回答 2查看 1.7K关注 0票数 2

在使用CF2016时,我在开发人员环境和生产环境中都看到过这种错误,但不太常见。

代码语言:javascript
复制
Metaspace null. The error ocurred on line -1.

阅读一些论坛,了解垃圾收集器的概念,并设法实现以下代码来强制收集器:

代码语言:javascript
复制
<cfset runtime = CreateObject("java","java.lang.Runtime").getRuntime()>
<cfset freeMemory = runtime.freeMemory() / 1024 / 1024>
<cfset totalMemory = runtime.totalMemory() / 1024 / 1024>
<cfset maxMemory = runtime.maxMemory() / 1024 / 1024>
<cfset usedMemory =  (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024>

<cfoutput>
    Used Memory: #Round(usedMemory)#mb<br>
    Free Allocated Memory: #Round(freeMemory)#mb<br>
    Total Memory Allocated: #Round(totalMemory)#mb<br>
    Max Memory Available to JVM: #Round(maxMemory)#mb<br>
</cfoutput>

<cfset clear = runtime.gc()> 

奇怪的是,运行时内存有很大的空间(通常一半的空间是空闲的),但Metaspace Null仍然出现。

另一个问题可能是加载的类,也许它们不是自动销毁的。但我找不到办法去看装了子弹的。

到目前为止,“解决方案”是重新启动服务器,这样我就可以正常操作了。我能够降低错误的出现频率,将最大JVM堆大小增加到1024MB,但仍然出现错误

和堆栈跟踪..。很难在一个虚拟文件中找到第-1行!xD

Java版本: 1.8.0_112

垃圾回收器:-XX:+UseParallelGC (默认)

VM的参数(跳行以便于阅读)

代码语言:javascript
复制
java.args=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 -server 
-Xms256m 
-Xmx1024m 
-XX:MaxMetaspaceSize=192m 
-XX:+UseParallelGC 
-Xbatch 
-Dcoldfusion.home={application.home} 
-Djava.awt.headless=true 
-Duser.language=en 
-Dcoldfusion.rootDir={application.home} 
-Djava.security.policy={application.home}/lib/coldfusion.policy 
-Djava.security.auth.policy={application.home}/lib/neo_jaas.policy 
-Dcoldfusion.classPath={application.home}/lib/updates,{application.home}/lib,{application.home}/lib/axis2,{application.home}/gateway/lib/,{application.home}/wwwroot/WEB-INF/cfform/jars,{application.home}/wwwroot/WEB-INF/flex/jars,{application.home}/lib/oosdk/lib,{application.home}/lib/oosdk/classes 
-Dcoldfusion.libPath={application.home}/lib 
-Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true 
-Dcoldfusion.jsafe.defaultalgo=FIPS186Random 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog 
-Djava.util.logging.config.file={application.home}/lib/logging.properties 
EN

回答 2

Stack Overflow用户

发布于 2018-05-09 04:53:18

您的最大元空间大小设置为192MB -我通过更新以下JVM标志将其设置为至少512MB:

代码语言:javascript
复制
-XX:MaxMetaspaceSize=512m

要保留最初的192MB并尝试节省(元)空间,还可以添加:

代码语言:javascript
复制
-XX:MetaspaceSize=192m

这解决了我们在遇到与您相同的情况时的问题。此外,您可以在计划任务中运行您的垃圾收集,如果您想确保它定期发生,则可以每天运行一次。

票数 3
EN

Stack Overflow用户

发布于 2020-02-28 04:30:08

我将提供一个不同的观点:对于大多数遇到像上面这样的元空间错误(或"outofmemoryerror: metaspace")的CF人员来说,这几乎总是因为Adobe默认设置了相对较低的默认192mb值。

虽然提高值确实是一种解决方案,但我认为对于大多数人来说,最好的解决方案是简单地删除maxmetaspacesize参数。我将在这里解释更多,包括为什么Adobe设置它(与Java 7及更早版本的maxpermsize相关的旧情况的残余):

https://www.carehart.org/blog/client/index.cfm/2020/2/24/solving_metaspace_errors/

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

https://stackoverflow.com/questions/49882984

复制
相关文章

相似问题

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