[英]Java OutOfMemory error in filter
在将大文件写入ServletOutputStream时,出现java.lang.outOfMemoryError异常。 默认情况下,每个响应都使用ehcache.constructs.web.filter对象包装,用于GZIP压缩。 并且根据日志,在Filter对象中引发了异常。 有没有一种方法可以增加可用内存,从而不会发生outOfMemoryError异常?
您需要将选项“ -Xmx1024m”添加到运行servlet容器的java
命令。 (将1024m替换为所需的任何堆大小;这意味着1024兆字节。)例如,如果使用的是Tomcat,则意味着您在环境变量CATALINA_OPTS中进行了设置。 您的服务器配置将有所不同。
但是,问题是在内存中缓冲了这么大的文件。 这很浪费。 尝试使用这种压缩过滤器,它不会以这种方式进行缓冲:
使用-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.