2013-04-10 12 views
1

编辑:我更改了名称,因为有一个类似的SO问题How do I fix SpreadSheetAddRows function crashing when adding a large query?在那里,描述我的问题,所以我认为更简洁...问题是电子表格添加我的查询结果炸弹整个服务器我认为适中的大小(1600行,27列),但听起来比他的18,000行要小得多SpreadsheetAddRows在中等大小的查询上失败

我正在使用通过ColdFusion 9.0.1 cfstoredproc访问的oracle存储过程,完成后为用户创建一个电子表格下载

问题是,比1200行更大的结果集正在返回500内部服务器错误,700行返回正常,所以我我猜这是一个记忆问题?

唯一的消息我收到比标准的ColdFusion看500内部服务器错误等是小字“GC开销超过限制”,这是只在页面刷新一次,这指的是基本的Java的JVM

我什至不知道如何去诊断这个

这里是CFSTOREDPROC和电子表格的末尾OBJ

<!--- variables assigned correctly above ---> 
<cfprocresult name="RC1"> 
</cfstoredproc> 

<cfset sObj = spreadsheetNew("reconcile","yes")> 
<cfset SpreadsheetAddRow(sObj, "Column_1, ... , Column27")> 

<cfset SpreadsheetFormatRow(sObj, {bold=TRUE, alignment="center"}, 1)> 

<cfset spreadsheetAddRows(sObj, RC1)> 
    <cfheader name="content-disposition" value="attachment; filename=report_#Dateformat(NOW(),"MMDDYYYY")#.xlsx"> 
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#spreadsheetReadBinary(sObj)#"> 
+0

你是否总是得到'gc overhead overhead exceeded'错误?该错误表明JVM在垃圾回收中花费了太多时间。如果您可以为JVM分配更多内存,则可以解决该问题。 http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html – 2013-04-11 11:53:33

+0

不,我只有40次尝试,我们碰到了JVM 3x,问题仍然存在 – 2013-04-11 14:29:42

回答

0

我的答案在于ColdFusion和一个简单的事实:不要使用SpreadsheetAddRows或像SpreadsheetFormatRows那些有关职能纽约

我对这个解决方案是执行查询,创建一个xls文件,使用标签cfspreadsheet写入到新创建的XLS文件,然后投放到该浏览器,服务

后删除

使用SpreadsheetAddRows,运行时崩溃的服务器继续1000+行,5 +分钟就行700使用 以上1-1.5秒

,如果你有兴趣了解更多的代码描述的方法,我可以只提供意见,我我正在使用冷箱框架,所以并没有认为具体只会帮助新的工作流程