我在将一个大文件写入servletOutputStream时得到了一个java.lang.outOfMemoryError异常。 默认情况下,每个响应都使用ehcache.constructs.web.filter对象进行GZIP压缩。并且根据日志,Filter对象中抛出异常。 有没有办法增加可用内存,以至于没有发生outOfMemoryError异常?
答案 0 :(得分:1)
您需要将“-Xmx1024m”选项添加到运行servlet容器的java
命令中。 (用你喜欢的任何堆大小替换1024m;这意味着1024兆字节。)如果你正在使用Tomcat,那么这意味着你在环境变量CATALINA_OPTS中设置它。您的服务器配置会有所不同。
然而,问题是在内存中缓冲这么大的文件。这很浪费。试试这个压缩过滤器,它不会以这种方式缓冲:
答案 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
此外,请确保您有效地流出文件。输出或输入流管道中可能存在不必要的大缓冲。