java - ¿Cómo le doy a Jenkins más espacio en montón cuando se ejecuta como daemon en Ubuntu?
out-of-memory heap (3)
Mis trabajos de Jenkins se están quedando sin memoria, dando mensajes java.lang.OutOfMemoryError
en el registro de compilación. Pero utilicé Ubuntu Package Manager, aptitude
o apt-get
para instalar Jenkins, y no sé dónde buscar para cambiar la cantidad de espacio de montón asignado a Jenkins.
Hay dos tipos de mensajes OutOfMemoryError
que puede encontrar mientras se ejecuta un trabajo Jenkins:
-
java.lang.OutOfMemoryError: Heap space
: esto significa que debe aumentar la cantidad de espacio de montón asignado a Jenkins cuando se inicia el daemon. -
java.lang.OutOfMemoryError: PermGen space
: esto significa que debe aumentar la cantidad de espacio de generación asignado para almacenar los metadatos del objeto Java. Aumentar el valor del parámetro-Xmx
no tendrá efecto en este error.
En Ubuntu 12.04 LTS, JAVA_ARGS
el comentario de la configuración JAVA_ARGS
en la línea diez de /etc/default/jenkins
:
- Para agregar más espacio de
-Xmx
Java, aumente el valor del parámetro-Xmx
Java. Eso establece el tamaño máximo del grupo de asignación de memoria (el montón recogido de basura). - Para agregar más espacio PermGen, agregue el parámetro
XX:MaxPermSize=512m
(reemplace512
con algo más si desea más. El montón de generación permanente contiene meta información sobre las clases de usuario.
Por ejemplo, este extracto es del /etc/default/jenkins
después de una nueva instalación de Jenkins:
# arguments to pass to java
#JAVA_ARGS="-Xmx256m"
Así es como se vería si configuras el espacio del montón para que sea de 1 GB:
# arguments to pass to java
JAVA_ARGS="-Xmx1048m"
Tenga cuidado de no configurar el tamaño del almacenamiento dinámico demasiado grande, ya que lo que asigna reduce la cantidad de memoria disponible para el sistema operativo y otros programas, lo que podría causar paginación excesiva (memoria intercambiada entre RAM y el disco de intercambio, lo que ralentizará su sistema abajo).
Si también configura MaxPermSpace
, necesita agregar un espacio entre los parámetros):
# arguments to pass to java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"
Después de realizar un cambio, reinicie Jenkins con elegancia desde la interfaz web de Jenkins o forzar un reinicio inmediato desde la línea de comandos con sudo /etc/init.d/jenkins restart
.
Encontré el siguiente sitio útil para comprender los tamaños de pila de generación máxima y permanente de Java: http://www.freshblurbs.com/blog/2005/05/19/explaining-java-lang-outofmemoryerror-permgen-space.html .
Para CentOS, el directorio en el que se encuentra Jenkins.xml de forma predeterminada es / etc / sysconfig / for jenkins-1.579-1.1
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="
Si está utilizando Ubuntu Server, primero instale el complemento Monitoring para ver cuánta memoria está usando Jenkins. Por ejemplo, esto es lo que vi después de instalarlo:
Luego, con el comando free -m
, descubrí cuál era el tamaño de la memoria del servidor. En mi caso, 16Gb. Con esa información, abrí /etc/default/jenkins
y cambié:
JAVA_ARGS="-Djava.awt.headless=true"
a
JAVA_ARGS="-Xmx8384m -Djava.awt.headless=true"
Donde 8384 es 8Gb. Luego reinicié Jenkins con el comando sudo service jenkins restart
y luego, después de desencadenar el trabajo que estaba recibiendo problemas de memoria, las cosas se veían mucho mejor y el trabajo podía completarse en esta y en las siguientes ejecuciones: