Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet Excel导出每隔300秒刷新一次请求,即使第一个请求不是';还没做完_Java_Excel_Memory_Servlets_Weblogic - Fatal编程技术网

Java Servlet Excel导出每隔300秒刷新一次请求,即使第一个请求不是';还没做完

Java Servlet Excel导出每隔300秒刷新一次请求,即使第一个请求不是';还没做完,java,excel,memory,servlets,weblogic,Java,Excel,Memory,Servlets,Weblogic,我正在开发一个程序,该程序经常从超大型数据库表导出Excel。我现在正在做的一个测试用例在一个xlsx工作表中包含大约300k行乘40列。它大约在6分钟左右完成,占用了1.1GB内存,但我遇到了一个大问题-在整整300秒过去后,我在日志中看到这个模式开始: 2010-10-04 13:15:13.201 ID0000 GRP=| Executing Excel Export 2010-10-04 13:20:13.156 ID0000 GRP=| Executing Excel Expo

我正在开发一个程序,该程序经常从超大型数据库表导出Excel。我现在正在做的一个测试用例在一个xlsx工作表中包含大约300k行乘40列。它大约在6分钟左右完成,占用了1.1GB内存,但我遇到了一个大问题-在整整300秒过去后,我在日志中看到这个模式开始:

2010-10-04 13:15:13.201 ID0000 GRP=| Executing Excel Export    
2010-10-04 13:20:13.156 ID0000 GRP=| Executing Excel Export    
2010-10-04 13:21:25.041 ID0000 GRP=| Excel Output Completed
2010-10-04 13:25:13.114 ID0000 GRP=| Executing Excel Export 
2010-10-04 13:26:34.315 ID0000 GRP=| Excel Output Completed
2010-10-04 13:30:13.074 ID0000 GRP=| Executing Excel Export
2010-10-04 13:31:28.854 ID0000 GRP=| Excel Output Completed
基本上,它在几乎完全300秒后执行相同的请求,从而使我的RAM使用量翻倍(达到非常不舒服的2GB),并延迟响应,同时在连接另一个内核时耗尽CPU。此外,由于请求已刷新,浏览器无法捕获第一个请求的结果,您可以看到,在发出第二个请求后不久,第一个请求就完成了。因此,当服务器占用越来越多的资源时,用户根本看不到输出

我已经在IE8和Firefox中复制了这种行为,并尝试使用response.setHeader(“Refresh”,“999999”);在servlet类中

我们正在使用Aspose.Cells进行导出,但它似乎与库正在执行的任何操作无关,因为我可以确认,整个请求从头到尾都在重复,而不仅仅是对Aspose的调用

有人知道我是否可以在weblogic服务器或浏览器中设置一个属性来阻止这种行为吗


编辑:即使在浏览器窗口关闭后,我也可以确认这种情况发生-我仍然会每隔5分钟看到“正在执行Excel导出”消息。它们基本上一直持续到我重新启动weblogic服务器。

听起来您的请求花费的时间比实际超时时间要长。我知道EJBRMI请求在weblogic中有300秒的超时,这是默认值。如果您正在使用EJB(或者其他一些使用RMI的奇怪东西),我建议您更改超时配置。如果您不使用EJB,我认为最好是寻找一些具有此超时值的weblogic请求配置。

结果表明,当servlet请求花费太长时间时,我们的后端有Apache尝试进行某种负载平衡,但由于没有其他服务器,它只会再次发出相同的请求,这加剧了问题。我将httpd.conf和httpd-ssl.conf中的WLIOTimeout设置为一个更高的数字,我们不再有这个问题了。谢谢。

此应用程序不使用EJB或RMI。我一直在搜索weblogic配置,但我没有看到任何与此相关的超时值…你能发布一些代码吗?如果我知道你是怎么打电话的,我可以帮你。