Как предоставить Jenkins больше места в куче, когда он работает как демон в Ubuntu?

Моим заданиям Jenkins не хватает памяти, что приводит к сообщениям java.lang.OutOfMemoryError в журнале сборки. Но я использовал диспетчер пакетов Ubuntu, aptitude или apt-get для установки Jenkins, и я не знаю, где искать, чтобы изменить объем кучи, выделенный для Jenkins.


person Steve HHH    schedule 07.02.2013    source источник


Ответы (4)


Существует два типа сообщений OutOfMemoryError, с которыми вы можете столкнуться во время выполнения задания Jenkins:

  • java.lang.OutOfMemoryError: Heap space — это означает, что вам нужно увеличить количество места в куче, выделяемое Jenkins при запуске демона.
  • java.lang.OutOfMemoryError: PermGen space — это означает, что вам необходимо увеличить объем пространства генерации, выделенного для хранения метаданных объекта Java. Увеличение значения параметра -Xmx не повлияет на эту ошибку.

В Ubuntu 12.04 LTS раскомментируйте настройку JAVA_ARGS в десятой строке /etc/default/jenkins:

  • Чтобы увеличить объем кучи Java, увеличьте значение параметра -Xmx Java. Это устанавливает максимальный размер пула выделения памяти (куча для сбора мусора).
  • Чтобы добавить больше пространства PermGen, добавьте параметр XX:MaxPermSize=512m (замените 512 чем-то другим, если хотите больше. Куча постоянного поколения содержит метаинформацию о пользовательских классах.

Например, этот отрывок из /etc/default/jenkins по умолчанию после новой установки Jenkins:

# arguments to pass to java
#JAVA_ARGS="-Xmx256m"

Вот как это будет выглядеть, если вы установите размер кучи равным 1 ГБ:

# arguments to pass to java
JAVA_ARGS="-Xmx1048m"

Будьте осторожны и не устанавливайте слишком большой размер кучи, так как все, что вы выделяете, уменьшает объем памяти, доступной для операционной системы и других программ, что может привести к чрезмерному подкачке (память перемещается туда и обратно между ОЗУ и диском подкачки, что замедляет работу). ваша система не работает).

Если вы также задали MaxPermSpace, вам нужно добавить пробел между параметрами):

# arguments to pass to java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"

После внесения изменений аккуратно перезапустите Jenkins из веб-интерфейса Jenkins или принудительно перезапустите из командной строки с помощью sudo /etc/init.d/jenkins restart.

Я нашел следующий сайт полезным для понимания максимальных и постоянных размеров кучи Java: .html" rel="noreferrer">http://www.freshblurbs.com/blog/2005/05/19/explaining-java-lang-outofmemoryerror-permgen-space.html.

person Steve HHH    schedule 07.02.2013
comment
Я думаю, вы забыли тире секунд, так что должно быть: JAVA_ARGS=-Xmx1048m -XX:MaxPermSize=512m - person Alper Akture; 04.04.2013
comment
Спасибо! Я добавил недостающее тире. - person Steve HHH; 04.04.2013
comment
Я обнаружил, что при установке Ubuntu мне пришлось зайти в /etc/init/jenkins.conf и добавить в строку JAVA_OPTS=. (редактирование местоположения /etc/default не дало результата, и я подтвердил это с помощью jmap). - person CasualT; 23.08.2013
comment
Есть ли способ сделать это в CentOS? Я не нахожу каталог /etc/default/jenkins. И все файлы, которые говорят Jenkins или находятся в каталогах jenkins, ничего не говорят о Xmx или памяти. - person FilBot3; 08.09.2014
comment
@Pred ты нашел решение своей проблемы? У меня такая же проблема с моим рабом jenkins, и я не знаю, где я должен передать эти аргументы java. Спасибо! - person user1164061; 30.07.2015
comment
Арх! Это, наконец, предотвратило сбой моей установки Jenkins после 3 дней поиска проблемы (спасибо!) Но с какой стати Java по умолчанию по-прежнему составляет всего 256 МБ в 2016 году ??? - person user3640967; 09.06.2016
comment
Вы также можете сказать -Xmx8g, что то же самое, что и -Xmx8384m, но проще. - person Assi.NET; 26.09.2019
comment
Разве 1 ​​ГБ не будет 1024 МБ? - person SaundersB; 13.12.2019

Для CentOS каталог Jenkins.xml по умолчанию находится в /etc/sysconfig/ для jenkins-1.579-1.1.

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="

person AvianFLU    schedule 10.09.2014
comment
Привет, я чуть не сошел с ума, пытаясь найти это - person bmaher; 12.03.2015
comment
На моем openSUSE Leap 42.1 (x86_64) конфигурация Jenkins для версии 2.70 находится в /etc/sysconfig/jenkins - person user1053510; 18.07.2017
comment
также для RedHat RHEL 7.4, Дженкинс 2.98 - person carl verbiest; 04.03.2018

Если вы используете Ubuntu Server, сначала установите плагин Monitoring, чтобы увидеть, сколько памяти использует Jenkins. . Например, вот что я увидел после установки:

введите описание изображения здесь

Затем с помощью команды free -m я вычислил размер памяти сервера. В моем случае 16Gb. С этой информацией я открыл /etc/default/jenkins и изменил:

JAVA_ARGS="-Djava.awt.headless=true"

to

JAVA_ARGS="-Xmx8384m -Djava.awt.headless=true"

Где 8384 это 8Gb. Затем я перезапустил Jenkins с помощью команды sudo service jenkins restart, а затем, после запуска задания, у которого возникали проблемы с памятью, все выглядело намного лучше, и задание могло завершиться в этом и последующих запусках:

введите описание изображения здесь

person Juampy NR    schedule 03.07.2017
comment
Вы также можете сказать -Xmx8g, что то же самое, что и -Xmx8384m, но проще. - person Assi.NET; 26.09.2019

Другой способ задать размер кучи для конкретных заданий — использовать переменные среды для каждого задания. Это гарантирует доступность памяти, когда задание, требующее большего объема памяти, не используется.

GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xms1024M -Xmx8192M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"

JAVA_OPTS="-XX:MaxPermSize=2048M"

Конфигурация задания Дженкинса

person Sandy    schedule 15.04.2020
comment
Нигде не вижу этой настройки, может стоит подробнее описать, где вы ее нашли. - person FooBar; 24.09.2020
comment
@FooBar Эти параметры взяты из плагина инжектора среды - person VanagaS; 23.07.2021