Ответ 1
Существует два типа сообщений OutOfMemoryError
, которые могут возникнуть при выполнении задания Jenkins:
-
java.lang.OutOfMemoryError: Heap space
- это означает, что вы необходимо увеличить объем пространства кучи, выделенного Дженкинсу, когда начинается демон. -
java.lang.OutOfMemoryError: PermGen space
- это означает, что вам нужно увеличить объем пространства генерации, выделенный для хранения метаданных объектов Java. Увеличение значение параметра-Xmx
не повлияет на эту ошибку.
В Ubuntu 12.04 LTS раскомментируйте настройку JAVA_ARGS
в строке 10 /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: http://www.freshblurbs.com/blog/2005/05/19/explaining-java-lang-outofmemoryerror-permgen-space.html.