java ubuntu jenkins out-of-memory heap

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 (reemplace 512 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: