Вы можете использовать DESCRIBE my_table и использовать результаты этого для генерации инструкции SELECT динамически.
Решение состояло в том, чтобы добавить эти флаги к командной строке JVM, когда Tomcat запускается:
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
можно сделать это путем закрытия сервиса кота, затем входа в Tomcat/каталог bin и выполнения tomcat6w.exe. Под вкладкой "Java" добавьте аргументы полю "Java Options". Нажмите "OK" и затем перезапустите сервис.
, Если Вы получаете ошибку , указанный сервис не существует как установленная служба , необходимо работать:
tomcat6w //ES//servicename
, где servicename является названием сервера, как просматривается в источнике services.msc
: комментарий orx Гибкие Ответы Eric .
jrockit разрешил это для меня также; однако, я заметил, что времена перезапуска сервлета были намного хуже, поэтому в то время как это лучше работало, это было, своего рода притягивают разработку.
Сервер приложений ошибки PermGen, которые происходят после нескольких развертывания, скорее всего, вызывается ссылками, сохраненными контейнером в classloaders Ваших старых приложений. Например, использование пользовательского класса уровня журнала заставит ссылки быть сохраненными classloader сервера приложений. Можно обнаружить эти утечки inter-classloader при помощи современного (JDK6 +) аналитические инструменты JVM, такие как jmap и jhat для рассмотрения, какие классы продолжают быть сохраненными в приложении, и перепроектировании или устранении их использования. Обычные подозреваемые являются базами данных, регистраторами и другими библиотеками основного уровня платформы.
См. утечки Classloader: страшное "java.lang. OutOfMemoryError: PermGen располагают с интервалами" исключение , и особенно ответное письмо .
Используйте параметр командной строки -XX:MaxPermSize=128m
для JVM Sun (очевидно, заменяющий 128 для любого размера, в котором Вы нуждаетесь).
С другой стороны, можно переключиться на JRockit который, обработав permgen jvm по-другому тогда солнца. Это обычно имеет лучшую производительность также.
http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html
Попробуйте -XX:MaxPermSize=256m
и если это сохраняется, попробуйте -XX:MaxPermSize=512m
Конфигурация памяти зависит от природы Вашего приложения.
, Что Вы делаете?
, Что прецессируется сумма транзакций?
, Сколько данных Вы загружаетесь?
и т.д.
и т.д.
и т.д.
, Вероятно, Вы могли представить свое приложение и начать очищать некоторые модули из своего приложения.
, По-видимому, это может произойти после повторного развертывания приложения несколько раз
, Tomcat имеет горячий, развертываются, но это использует память. Попытайтесь перезапустить свой контейнер время от времени. Также необходимо будет знать, что объем памяти должен был работать в производственном режиме, это кажется хорошим временем для того исследования.
Вам лучше попробовать -XX: MaxPermSize = 128M
, а не -XX: MaxPermGen = 128M
.
Я не могу сказать точно, как используется этот пул памяти, но это связано с количеством классов, загруженных в JVM. (Таким образом, включение выгрузки классов для tomcat может решить проблему.) Если ваши приложения генерируют и компилируют классы на ходу, скорее всего, потребуется пул памяти большего размера, чем по умолчанию.
У меня есть комбинация Hibernate + Eclipse RCP, я пробовал использовать -XX: MaxPermSize = 512m
и -XX: PermSize = 512m
и кажется работать на меня.
Установите -XX: PermSize = 64m -XX: MaxPermSize = 128m
. Позже вы также можете попробовать увеличить MaxPermSize
. Надеюсь, это сработает. У меня то же самое. Только установка MaxPermSize
у меня не сработала.