Java SpreadsheetAddRows在中等大小查询中失败 < >编辑:我改变了名字,因为这里有一个类似的问题来描述我的问题,所以我更简洁地说了……这个问题是我的查询结果的电子表格,在我认为中等大小(1600行,27列)的情况下,整个服务器都被炸弹炸毁了,但是这听起来比他的18000行要小得多。
我正在使用一个通过coldfusion 9.0.1 cfstoredproc访问的oracle存储过程,该存储过程完成后将创建一个电子表格供用户下载 问题是大于1200行的结果集返回500个内部服务器错误,700行返回正常,所以我猜这是内存问题 在标准coldfusion外观中,除了500个内部服务器错误之外,我收到的唯一一条消息是小字的“超出了gc开销限制”,并且在页面刷新时仅出现一次,这是指底层Java JVM 我甚至不知道如何去诊断这个 以下是cfstoredproc和电子表格obj的结尾Java SpreadsheetAddRows在中等大小查询中失败 < >编辑:我改变了名字,因为这里有一个类似的问题来描述我的问题,所以我更简洁地说了……这个问题是我的查询结果的电子表格,在我认为中等大小(1600行,27列)的情况下,整个服务器都被炸弹炸毁了,但是这听起来比他的18000行要小得多。,java,coldfusion,jvm,spreadsheet,Java,Coldfusion,Jvm,Spreadsheet,我正在使用一个通过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)#">
我的答案在于coldfusion和一个简单的事实:不要使用SpreadsheetAddRows或SpreadsheetFormatRows等任何相关函数 我的解决方案是执行查询,创建一个xls文件,使用标记cfspreadsheet写入新创建的xls文件,然后服务于浏览器,在服务后删除 使用SpreadsheetAddRows,运行时从1000多行的服务器崩溃到700多行的服务器崩溃需要5分钟 使用上述方法1-1.5秒
如果您对更多的代码感兴趣,我可以提供一些评论,我使用的是coldbox框架,因此我不认为这种特定性会对新的工作流有所帮助您是否总是得到超出
gc开销限制的错误?该错误表明JVM在垃圾收集上花费了太多时间。如果您可以为JVM分配更多内存,它将解决这个问题。不,我只得到了40次尝试中的一次,我们提升了JVM 3x,这个问题仍然适用