繁体   English   中英

过滤器中的Java OutOfMemory错误

[英]Java OutOfMemory error in filter

在将大文件写入ServletOutputStream时,出现java.lang.outOfMemoryError异常。 默认情况下,每个响应都使用ehcache.constructs.web.filter对象包装,用于GZIP压缩。 并且根据日志,在Filter对象中引发了异常。 有没有一种方法可以增加可用内存,从而不会发生outOfMemoryError异常?

您需要将选项“ -Xmx1024m”添加到运行servlet容器的java命令。 (将1024m替换为所需的任何堆大小;这意味着1024兆字节。)例如,如果使用的是Tomcat,则意味着您在环境变量CATALINA_OPTS中进行了设置。 您的服务器配置将有所不同。

但是,问题是在内存中缓冲了这么大的文件。 这很浪费。 尝试使用这种压缩过滤器,它不会以这种方式进行缓冲:

http://sourceforge.net/projects/pjl-comp-filter/

使用-Xmx Java命令行选项,如下所示

java -Xms256m -Xmx512m com.test.MyMain

Xms代表内存分配的低端,而Xmx代表内存分配的高端

为您的servlet容器-Xmx256m -Xms128m设置以下JVM选项(在Tomcat中,它在catalina.sh / catalina.bat

不要忘记可能需要增加PermGen的大小:

-XX:PermSize=64m -XX:MaxPermSize=256m

还要确保您正在有效地流式传输文件。 在输出或输入流管道中可能会有不必要的大缓冲。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM