日安,
我想知道是否有可能查看/调试/黑进coldfusion.runtime源代码。
具体地说,我遇到了内存不足的错误,如下所示:
allocLargeObjectOrArray: [C, size 8388624
java.lang.OutOfMemoryError: allocLargeObjectOrArray: [C, size 8388624 at
java.util.Arrays.copyOf(Arrays.java:2882) at
java.io.CharArrayWriter.write(CharArrayWriter.java:105) at
coldfusion.runtime.CharBuffer.replace(CharBuffer.java:37) at
coldfusion.runtime.CharBuffer.replace(CharBuffer.java:50) at
coldfusion.runtime.NeoBodyContent.write(NeoBodyContent.java:254) at
[My Code]我想知道CharBuffer替换了什么,为什么,它复制了什么数组,为什么,等等,这样我就可以调优我的代码。
我的代码cfloop遍历一个查询并输出它的字段,包括一个'IIf‘语句和一个'de’函数调用。
我知道我可以修补代码,然后等待它再次崩溃(或不崩溃),但我更愿意看到问题到底是什么,而不是使用试错。
谢谢。
发布于 2013-03-08 23:49:56
第一个选项是设置HeapDumpOnOutOfMemoryError,然后在JHAT中打开转储,查找占用空间的原因。假设出错的代码试图复制一个大的缓冲区,那么内存中应该已经有一个缓冲区了。这应该会给你指出错误的方向
但是,如果您愿意,您几乎可以肯定地执行以下操作:
code
<
这将使您能够在线程出错时停止线程并检查变量。您的代码中似乎有一些东西正在创建一个8.3兆字节的字符串。能够检查内存可能会有很大帮助。
发布于 2013-03-08 20:18:13
获取免费的Java反编译器:http://jd.benow.ca/。
在ColdFusion安装目录中搜索cfusion.jar文件。
用反编译器打开它。CharBuffer应该在里面
发布于 2013-03-12 12:06:47
归根结底,它只是取决于Coldfusion如何缓冲它的页面。
它管理自己的java.io.CharArrayWriter实现,请参见第88行,其中每当char[]满时,它将使它的大小加倍。
在我看来是合理的。但是我们的一些页面非常大,8mb * 20个并发页面请求意味着大量的RAM活动。
我只需要努力缩小我们页面的大小...
https://stackoverflow.com/questions/15284172
复制相似问题