Ошибки PermGen в Дженкинсе

У меня были случаи неудач Дженкинса, и ничего, кроме перераспределения Дженкинса (Jenkins - webapp в Tomcat) помогло. Даже новые рабочие места не удались с ошибками пространства PermGen, но все настройки были точными (все эти параметры -XX:PermSize везде были возможны). Дело в том, что после переделки все работает как шарм. Но это суровое решение. Я хотел знать, если есть некоторые варианты откат состояния Дженкинса. Спасибо заранее.

Обновить. Хорошо, для тех, кто может столкнуться с чем-то подобным, вот что я понял. Те, кто писал, что лучше развернуть Jenkins в качестве модуля Tomcat, вероятно, не сталкивались с проблемами любого развертывания проекта (с плагином Jenkins Deploy или с tomcat-maven-plugin в Maven pom.xml). У меня не было проблем, которые я описал при установке Дженкинса отдельно. Уф!

Ответы

Ответ 1

Единственная настройка, которая действительно имеет значение для пространственных ошибок PermGen, (и это должно быть именно так):

-XX:MaxPermSize=512m

Один тире, два Big Xs, Big-M, Big-P, Big-S, no-spaces, size-in-megs, ниже case m. Если вы ввернете его, он будет проигнорирован. 99% всех исправлений PermGen я вижу, что "не работают", потому что кто-то точно не выполнял инструкции и использовал Big-M для мегабайт вместо маленького-м или поставил две черты впереди вместо одной для пример.

Кроме того, 512 мегабайт - это всего лишь отправная точка... приспосабливайтесь к вашей системе.

Ответ 2

Я когда-то сталкивался с подобными ошибками: jenkins выполнял сборки maven, которые включали выполнение пробных тестов. Я обнаружил, что версия maven, которую я использовал (что-то V2), не передавала моим параметрам памяти JVM в вилку процесса realfire, и из-за этого некоторые тесты терпели неудачу. MAVEN_OPTS, JAVA_OPTS, никто не работал.

Я закончил передачу своих опций памяти непосредственно в settings.xml, и ошибки PermGen исчезли.

Вот варианты, которые я использовал (приложение было довольно большим):

-Xms512m -Xmx1024m -XX: PermSize = 512 м -XX: MaxPermSize = 1024 м

Ответ 3

Полностью непроверенное предложение, но этот ответ предлагает использовать -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled при запуске Tomcat (хотя и для проблемы в совершенно другом контексте). Этот ответ, однако, предполагает, что CMSPermGenSweepingEnabled не требуется на Java 6 и что -XX:+UseConcMarkSweepGC должен использоваться для CMSClassUnloadingEnabled для эффективности.

По крайней мере -XX:+CMSClassUnloadingEnabled может сделать трюк, предполагая, что основная проблема вызвана тем, что классы не обязательно поддерживаются в пространстве PermGen для вашего экземпляра Tomcat.

Ответ 5

Я нашел, что помог JRE до Java 8. По умолчанию Jenkins использует JRE под домашней папкой, вызывается с помощью задачи jenkins.xml