Получение ошибки permgen при запуске easyb \ selenium

У меня в игре 6 технологий

easyB Selenium Gradle Ant Java Дженкинс

Мы используем easyB для написания сценариев.
Эти сценарии, в свою очередь, вызывают Selenium
Наконец, мы используем Gradle, чтобы запустить все истории. А поскольку у нас нет плагина gradle для easyB, gradle действительно использует ant для запуска easyB.

Этот скрипт Gradle, наконец, выполняется через задание Jenkins.

Полное выполнение занимает около 3-4 часов. На полпути мы получаем ошибку perm-gen.

Я не уверен, какой процесс требует увеличения в PermGen

EasyB? Муравей? Gradle?


Сообщение об ошибке
Теперь значение повторной попытки [ant: easyb]: 2
[ant: easyb] objectID установлен на: 60868
[ant: easyb] break после создания subjectID 60868
[ant: easyb] Создание посещения >>>>>> Предварительная обработка
[ant: easyb] Создание группы изображений >>>>>> auto-gp1
[ant: easyb] Произошла ошибка запуск вашей истории или спецификации easyb
[ant: easyb] java.lang.OutOfMemoryError: PermGen space
[ant: easyb] выполнение easyb НЕ ИСПОЛЬЗУЕТСЯ

ОШИБКА: сбой при сборке за исключением.


Скрипт Gradle

check << {
    def script = new GroovyShell()
    script.run(new File('InitializeReport.groovy'))

    ant.taskdef(name: "easyb", classname:"org.easyb.ant.BehaviorRunnerTask", classpath: sourceSets.test.runtimeClasspath.asPath)

    ant.easyb( classpath: sourceSets.test.runtimeClasspath.asPath, failureProperty:'easyb_failed' ,tags:tags) {
        report( location:"${project.testResultsDir}/story."+format, format:format )
        behaviors( dir: storiesHome ) {
            include( name:storyToBeExecuted )
        }
   }

    ant.fail( if:'easyb_failed', message: 'Failures in easyb stories' )
}

Это то, что я вижу на консоли Jenkins. Примечание. Как параметры памяти передаются команде Gradle, но не команде Java, которая запускает сценарии easyB? Вот где - я думаю, проблема ...

[jenkins @ bil-dev-006v bin] $ ps -ef | grep gradle

Дженкинс 18420 4714 9 23:04? 00:00:16 /usr/java/jdk1.6.0_20/bin/java -XX: MaxPermSize = 700m -Xmx512m -XX: MaxPermSize = 800m -Xmx512m -classpath / opt / jenkins / gradle- 1.0-milestone-1 / lib / gradle-launcher-1.0-milestone-1.jar -Dorg.gradle.appname = gradle org.gradle.launcher.GradleMain -PstoryName = -PstoriesHome = check -info

Вам необходимо увеличить пространство perm gen, вы можете сделать это, установив параметр max в настройках виртуальной машины. В командной строке запустите Java со следующей опцией:


person RN.    schedule 20.01.2012    source источник


Ответы (2)


-XX: MaxPermSize = 128 м

См. Также: http://www.freshblurbs.com/explaining-java-lang-outofmemoryerror-permgen-space

Как вы это реализовали, тесты easyB будут выполняться в «основной» JVM Gradle (если задача easyB Ant не создает новую JVM, в чем я сомневаюсь). Один из способов передать параметры JVM этому процессу - через среду _1_ Переменная:

person Dan Hardiker    schedule 20.01.2012
comment
Какой бы процесс ни вызвал ошибку. Не помешает установить его для всех! - person RN.; 20.01.2012
comment
Я добавил GRADLE_OPTS в свою переменную env - это, похоже, не помогло. Думаю, я могу попробовать другие альтернативные способы ... - person Dan Hardiker; 22.01.2012

Другой способ установить этот параметр: properties.gradle (см. руководство пользователя Gradle для получения подробной информации) или настройки gradlew скрипта (если вы используете оболочку Gradle).

export GRADLE_OPTS="-XX:MaxPermSize=128m"

Для какого процесса? Муравей? Gradle? EasyB?

person Peter Niederwieser    schedule 20.01.2012
comment
Либо вы ошиблись при установке переменной окружения, либо задача easyB Ant создает новую JVM. Я не могу найти никаких указаний на последнее. С помощью такого инструмента, как _1_ в * nix или Process Explorer в Windows, вы можете легко проверить, какие аргументы командной строки передаются процессу Gradle и есть ли среди них _2_. - person RN.; 20.01.2012
comment
Я подхожу ближе ... Я вижу, что процесс Gradle фактически получает параметры памяти (мне пришлось отредактировать сценарий gradle), но сценарий EasyB, запущенный из Gradle, не передает параметры памяти. - person Peter Niederwieser; 21.01.2012
comment
Похоже, что задача easyB Ant действительно фактически создает новый процесс, что делает этот вопрос чисто easyB (задача Ant). Я не видел способа передать параметры памяти этой задаче Ant, но лучше спросите в списке easyB. - person RN.; 26.01.2012
comment
Хорошо, я думаю, что наконец-то дошел до этого - это не Gradle, который порождает второй процесс. Но задача Ant .... Если это так - вы правы, это будет Q для списка easyB. Спасибо за вашу помощь и терпение. - person Peter Niederwieser; 27.01.2012
comment
Дженкинс 18579 18420 13 23:04? 00:00:21 /usr/java/jdk1.6.0_20/jre/bin/java -classpath / jenkins / jobs / helium-complete-run / workspace / trunk / build / classes / main: / jenkins / jobs / helium- complete-run / workspace / trunk / lib / commons-lang-2.4.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/httpclient-4.1.1.jar: / jenkins / jobs / helium- complete-run / workspace / trunk / lib / xml-apis.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/activation.jar: / jenkins / jobs / helium-complete-run / workspace / trunk / lib / xercesSamples.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/safe-client.jar: / jenkins / jobs / helium-complete-run / workspace / trunk / lib / security. jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/json-lib-2.4-jdk15.jar: / jenkins / jobs / helium-complete-run / workspace / trunk / lib / http-builder- 0.5.1.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/safe-import.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/mail.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/ojdbc14.jar:/jenkins/jobs/helium-complet e-run / workspace / trunk / lib / httpcore-4.1.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/xercesImpl.jar: / jenkins / jobs / helium-complete-run / workspace / trunk / lib / cacher.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/serializer.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/resolver.jar: /jenkins/jobs/helium-complete-run/workspace/trunk/lib/cache-verifier.jar:/opt/jenkins/.gradle/cache/org.easyb/easyb/jars/easyb-0.9.7.jar:/ opt / jenkins / .gradle / cache / commons-cli / commons-cli / jars / commons-cli-1.1.jar: /opt/jenkins/.gradle/cache/org.codehaus.groovy/groovy-all/jars/groovy -all-1.7.2.jar: /opt/jenkins/.gradle/cache/org.seleniumhq.selenium.client-drivers/selenium-java-client-driver/jars/selenium-java-client-driver-1.0.1 .jar: /opt/jenkins/.gradle/cache/log4j/log4j/bundles/log4j-1.2.16.jar: /opt/jenkins/.gradle/cache/org.codehaus.groovy/groovy/jars/groovy-1.8 .2.jar: /opt/jenkins/.gradle/cache/antlr/antlr/jars/antlr-2.7.7.jar: /opt/jenkins/.gradle/cache/asm/asm/jars/asm-3.2.jar : / opt / jenkins / .gradle / cache / asm / asm-commons / jars / asm-commons-3.2.jar: /opt/jenkins/.gradle/cache/asm/asm-tree/jars/asm-tree-3.2.jar : /opt/jenkins/.gradle/cache/asm/asm-util/jars/asm-util-3.2.jar: /opt/jenkins/.gradle/cache/asm/asm-analysis/jars/asm-analysis-3.2 .jar org.easyb.BehaviorRunner -outfail failed.txt -html /jenkins/jobs/helium-complete-run/workspace/trunk/build/test-results/storycaseassigment_inter-intra.html / jenkins / jobs / helium-complete-run /workspace/trunk/src/test/stories/caseassigment/inter-intra/ca_interintra.story - person RN.; 27.01.2012