2013-08-16 6 views
0

Iam, используя Tomcat 6, пружины, спящий режим и стойки в моем приложении. Часто я получаю это исключение в журналах относительно памяти, и сайт зависает и перестает отвечать. Я не уверен, что случилось. Может ли кто-нибудь предположить, какие изменения необходимо сделать, чтобы этого избежать.Tomcat - пространство PermGen Исключение

org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable запустить СЕРЬЕЗНОЕ: Caught исключения (java.lang.OutOfMemoryError: PermGen пространства) выполняющегося [email protected], прекращение thread

+0

Возможный дубликат [Как предотвратить ошибки пространства PermGen в Netbeans?] (Http://stackoverflow.com/questions/673646/how-can-i-prevent-permgen-space-errors-in-netbeans) – bummi

ответ

2

Пространство PermGen - это то, что Tomcat использует для хранения определений классов (только определений, без экземпляров) и пулов строк, которые были интернированы. Исходя из опыта, проблемы пространства PermGen часто происходят в средах разработчиков, поскольку Tomcat должен загружать новые классы каждый раз, когда он развертывает WAR или делает jspc (при редактировании файла jsp). Лично я склоняюсь к развертыванию и повторному развертыванию войн, когда я нахожусь в тестировании dev, поэтому я знаю, что рано или поздно мне придется рано или поздно заканчиваться (в первую очередь потому, что циклы GC в Java по-прежнему выглядят как дерьмо, поэтому, если вы быстро и часто передираете свои войны достаточно, пространство заполняется быстрее, чем они могут управлять).

Это должно теоретически быть менее проблемой в производственных средах, поскольку вы (надеюсь) не меняете код на 10-минутной основе. Если это все еще происходит, это означает, что ваша кодовая база (и соответствующие зависимости в библиотеке) слишком велика для распределения памяти по умолчанию, и вам просто нужно возиться с распределением стека и кучи. Я думаю, что стандарты таких вещей, как:

-XX: MaxPermSize = SIZE Я обнаружил, однако лучший способ позаботиться о том, что для хорошего, чтобы позволить классам быть выгружены, чтобы ваш PermGen никогда не закончится:

-XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEnabled Такие вещи для меня в прошлом работали. Одна вещь заключается в существенном компромиссе с производительностью в использовании этих средств, поскольку прокрутки пергентов будут делать как 2 дополнительных запроса на каждый сделанный вами запрос или что-то в этом роде. Вам нужно сбалансировать свое использование с компромиссами.

+0

изменения, сделанные как и предлагаемые, и от пары дней, получают эту ошибку ..... надеюсь, этот wud продолжится. thnx :) – Santosh

0

У вашего приложения может быть утечка памяти или у вашего Tomcat может не хватить памяти для запуска приложения. Используйте инструменты, например Yourkit, чтобы проверить использование вашей памяти.

Редактировать: Попробуйте увеличить память Tomocat. По умолчанию он начинается с 256 МБ. Если вы находитесь в Windows, вы можете сделать это, настроив параметры процесса Tomcat. См. Ниже сообщение. How do I increase memory on Tomcat 7 when running as a Windows Service?

Смежные вопросы