Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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
PageOutputStream导致java.lang.OutOfMemory_Java_Tomcat_Struts2_Heap_Out Of Memory - Fatal编程技术网

PageOutputStream导致java.lang.OutOfMemory

PageOutputStream导致java.lang.OutOfMemory,java,tomcat,struts2,heap,out-of-memory,Java,Tomcat,Struts2,Heap,Out Of Memory,我们有一个在Tomcat 7中运行的struts2 web应用程序间歇性地遇到相同的问题: 应用程序正常运行 经过10分钟到7天不等的一段时间后,应用程序会减速停止 catalina.out中存在多个java.lang.OutOfMemory错误 LinuxFree-m显示所有物理内存和交换内存都已用完,即使我在setenv.sh中设置了Xmx8G 我已经将Tomcat配置为在OutOfMemory上创建一个自动堆转储,当我在Eclipse中使用jmap或MAT分析转储时,每个转储都显示相同的内

我们有一个在Tomcat 7中运行的struts2 web应用程序间歇性地遇到相同的问题:

应用程序正常运行 经过10分钟到7天不等的一段时间后,应用程序会减速停止 catalina.out中存在多个java.lang.OutOfMemory错误 LinuxFree-m显示所有物理内存和交换内存都已用完,即使我在setenv.sh中设置了Xmx8G 我已经将Tomcat配置为在OutOfMemory上创建一个自动堆转储,当我在Eclipse中使用jmap或MAT分析转储时,每个转储都显示相同的内容。几乎100万个java.util.LinkedList$Node占用了所有内存,这些节点似乎是由PageOutputStream生成的

由于这些节点似乎是由PageOutputStream生成的,而PageOutputStream是Struts中页面呈现的一部分,因此我的想法是,在创建所有这些链表节点的一个JSP页面中,有一个Struts标记的无限循环,但我很难理解如何找到该页面


我想知道是否有人知道一种方法可以将这个问题进一步隔离到一行代码或一个jsp页面?

我最终发现问题是jsp中的一个Struts标记被损坏了。我在控制器中检索一组结果,并使用


这些搜索结果包括一些嵌入的HTML,它们创建了一个更长的迭代,不是无限的,但足够长,可以快速消耗内存。一旦我修复了嵌入的HTML,问题就消失了。

我认为你的问题应该是FastByteArrayOutpuStream,因为PageOutputStream什么都不做,它是FastByteOutputStream的包装器。添加你正在使用的Struts2版本,一个完整的堆栈跟踪,如果堆栈跟踪包含来自某个类/页的代码,那么也将其发布。