2013-04-10 13 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秒

,如果你有興趣瞭解更多的代碼描述的方法,我可以只提供意見,我我正在使用冷箱框架,所以並沒有認爲具體只會幫助新的工作流程