Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Steve HHHОтветов: 4

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

ubuntujenkinsjavaout-of-memoryheap

Ответы

Ответ 1 · рейтинг 76 · Steve HHH

Существует два типа сообщений 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.

Ответ 2 · рейтинг 32 · AvianFLU

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

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

Ответ 3 · рейтинг 20 · Juampy NR

Если вы используете 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, а затем, после запуска задания, у которого возникали проблемы с памятью, все выглядело намного лучше, и задание могло завершиться в этом и последующих запусках:

Ответ 4 · рейтинг 2 · Sandy

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

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"

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы