过滤器中的Java OutOfMemory错误

时间:2010-03-19 09:20:18

标签: java servlets

我在将一个大文件写入servletOutputStream时得到了一个java.lang.outOfMemoryError异常。 默认情况下,每个响应都使用ehcache.constructs.web.filter对象进行GZIP压缩。并且根据日志,Filter对象中抛出异常。 有没有办法增加可用内存,以至于没有发生outOfMemoryError异常?

4 个答案:

答案 0 :(得分:1)

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

然而,问题是在内存中缓冲这么大的文件。这很浪费。试试这个压缩过滤器,它不会以这种方式缓冲:

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

答案 1 :(得分:0)

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

java -Xms256m -Xmx512m com.test.MyMain

Xms表示内存分配的低端,Xmx表示内存分配的上端

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不要忘记可能需要增加PermGen尺寸:

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

此外,请确保您有效地流出文件。输出或输入流管道中可能存在不必要的大缓冲。