相关疑难解决方法(0)

内存泄漏在cffunction内部循环cfmodule

Google员工,如果你有一个带有coldfusion.runtime.CFDummyComponent读取根的堆转储.

2011年2月22日更新

MXUnit成名的Marc Esher在不同的背景下发现了完全相同的错误.他的解决方案包括了从去解决的查询一个大循环query="name"from="1" to="#name.recordcount#" index="row".另一种有效的方法是<cfthread>在循环内部使用:

<cfloop ...>
    <cfset threadName = "thread" & createUuid()>
    <cfthread name="#threadName#">
        <!--- do stuff --->
    </cfthread>
    <cfthread action="join" name="#threadName#">
</cfloop>
Run Code Online (Sandbox Code Playgroud)

当您遇到需要在循环内部执行操作(如查询和<cfmodule>内部)<cffunction>以便消耗的内存仅用于该迭代时,这非常有效.

老问题

希望别人可以确认或告诉我我做错了什么.我能够通过调用文件oom.cfm(如下所示)一致地重现运行的OOM.使用jconsole我能够看到请求消耗内存并且永远不会释放它直到完成.问题似乎是<cfmodule>在内部调用<cffunction>,如果我注释掉<cfmodule>调用,那么在请求运行时会收集垃圾.

ColdFusion版本:9,0,1,274733

JVM参数

java.home=C:/Program Files/Java/jdk1.6.0_18
java.args=-server  -Xms768m -Xmx768m -Dsun.io.useCanonCaches=false -XX:MaxPermSize=512m -XX:+UseParallelGC -Xbatch -Dcoldfusion.rootDir={application.home}/ -Djava.security.policy={application.home}/servers/41ep8/cfusion.ear/cfusion.war/WEB-INF/cfusion/lib/coldfusion.policy -Djava.security.auth.policy={application.home}/servers/41ep8/cfusion.ear/cfusion.war/WEB-INF/cfusion/lib/neo_jaas.policy -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=56033
Run Code Online (Sandbox Code Playgroud)

测试用例

oom.cfm(以下称为template.cfm - Adobe Bug#85736)

<cffunction name="fun" output="false" access="public" returntype="any" hint="">
    <cfset var local …
Run Code Online (Sandbox Code Playgroud)

coldfusion memory-leaks coldfusion-9

8
推荐指数
1
解决办法
1663
查看次数

标签 统计

coldfusion ×1

coldfusion-9 ×1

memory-leaks ×1