Ошибка Java OutOfMemory в фильтре - PullRequest
2 голосов
/ 19 марта 2010

Я получаю исключение java.lang.outOfMemoryError при записи большого файла в servletOutputStream. Каждый ответ по умолчанию упакован с использованием объекта ehcache.constructs.web.filter для сжатия GZIP. И согласно журналам, исключение выдается в объекте Filter. Есть ли способ увеличить объем доступной памяти, чтобы исключение outOfMemoryError не возникало?

Ответы [ 4 ]

1 голос
/ 19 марта 2010

Вам необходимо добавить опцию "-Xmx1024m" к команде java, которая запускает ваш контейнер сервлета. (Замените 1024 метра на любой размер кучи, который вам нравится; это означает 1024 мегабайта.) Если вы используете, скажем, Tomcat, то это означает, что вы задали это в переменной среды CATALINA_OPTS. Конфигурация вашего сервера будет отличаться.

Однако проблема заключается в буферизации такого большого файла в памяти. Это расточительно. Попробуйте этот фильтр сжатия, который не буферизует таким образом:

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

0 голосов
/ 20 марта 2010

Не забывайте о необходимости увеличения размера PermGen:

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

Также убедитесь, что вы эффективно транслируете файл. В канале вывода или потока ввода может быть излишне большая буферизация.

0 голосов
/ 19 марта 2010

Установите следующие параметры JVM для вашего контейнера сервлета -Xmx256m -Xms128m (в Tomcat он находится в catalina.sh / catalina.bat)

0 голосов
/ 19 марта 2010

Используйте параметр командной строки Java -Xmx, как показано ниже

java -Xms256m -Xmx512m com.test.MyMain

Xms представляет нижний предел выделения памяти, а Xmx представляет верхний предел выделения памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...