Ошибки 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.
Ответ 4
Возможно, этот вопрос может помочь вам:
Как дать Jenkins больше места для кучи, когда он запущен как служба под Windows?
Есть очень хорошие ответы.
Ответ 5
Я нашел, что помог JRE
до Java 8
. По умолчанию Jenkins использует JRE
под домашней папкой, вызывается с помощью задачи jenkins.xml