Моим заданиям Jenkins не хватает памяти, что приводит к сообщениям java.lang.OutOfMemoryError в журнале сборки. Но я использовал диспетчер пакетов Ubuntu, aptitude или apt-get для установки Jenkins, и я не знаю, где искать, чтобы изменить объем кучи, выделенный для Jenkins.
Как предоставить Jenkins больше места в куче, когда он работает как демон в Ubuntu?
Ответы (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, увеличьте значение параметра
-XmxJava. Это устанавливает максимальный размер пула выделения памяти (куча для сбора мусора). - Чтобы добавить больше пространства 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.
Для CentOS каталог Jenkins.xml по умолчанию находится в /etc/sysconfig/ для jenkins-1.579-1.1.
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="
/etc/sysconfig/jenkins
- person user1053510; 18.07.2017
Если вы используете 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, а затем, после запуска задания, у которого возникали проблемы с памятью, все выглядело намного лучше, и задание могло завершиться в этом и последующих запусках:
Другой способ задать размер кучи для конкретных заданий — использовать переменные среды для каждого задания. Это гарантирует доступность памяти, когда задание, требующее большего объема памяти, не используется.
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"


