2012-06-21 21 views
15

Tuve casos de fallas de Jenkins y nada más que el redespliegue de Jenkins (Jenkins es una aplicación web en Tomcat) ayudó. Incluso los trabajos nuevos fallaron con los errores de espacio de PermGen, pero todas las configuraciones estaban bien (todos estos parámetros -XX:PermSize en todas partes es posible). El punto es después del redespliegue todo funcionó como un encanto. Pero es una solución dura. Quería saber si hay algunas opciones para revertir el estado de Jenkins. Gracias por adelantado.Errores de PermGen en Jenkins

Actualización: De acuerdo, para aquellos, que pueden enfrentar algo así, esto es lo que descubrí. Aquellos que escribieron que es mejor implementar Jenkins como un módulo Tomcat probablemente no enfrentaron los problemas de ningún tipo de implementación del proyecto (con el plugin Jenkins Deploy o con un tomcat-maven-plugin en Maven's pom.xml). No tuve ninguno de los problemas que describí cuando instalé Jenkins por separado. ¡Uf!

+0

¿se está ejecutando bajo ubuntu? en caso afirmativo, debe anular las configuraciones/etc/default/tomcat. De lo contrario, podría intentar ejecutar tomcat con Jrockit JVM que no sufra problemas de permgenspace. – jocelyn

+0

@jocelyn Sí, es Ubuntu, y traté de anular esas configuraciones. Jrockit puede ser una solución, aún así es un poco extraño cambiar JVM por culpa de Jenkins. –

Respuesta

6

Una vez experimenté errores similares: jenkins estaba ejecutando maven compilaciones, que incluían la ejecución de pruebas infalibles. Descubrí que la versión de maven que estaba usando (algo V2) no pasó mis opciones de memoria JVM a la bifurcación del proceso surefire, y algunas pruebas fallaban debido a esto. MAVEN_OPTS, JAVA_OPTS, ninguno funcionó.

Terminé pasando mis opciones de memoria directamente en settings.xml, y los errores de PermGen desaparecieron.

Estas son las opciones que utilicé (La aplicación fue bastante grande):

-Xms512m -Xmx1024m -XX: PermSize = 512m -XX: MaxPermSize = 1024m

+1

Gracias, tal vez lo necesite, pero en mi caso PermGen siempre apareció desde el principio, no mientras realizaba pruebas o algo más. –

4

sugerencia, no está comprobado, pero sugiere el uso de this answer-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled al iniciar Tomcat (aunque para un problema en un contexto completamente diferente). This answer, sin embargo, sugiere que CMSPermGenSweepingEnabled es innecesario en Java 6 y que -XX:+UseConcMarkSweepGC se debe utilizar para CMSClassUnloadingEnabled para que sea efectivo.

Por lo menos -XX:+CMSClassUnloadingEnabled puede hacer el truco asumiendo que el problema subyacente es causado por las clases que se mantienen innecesariamente en el espacio PermGen para su instancia Tomcat.

+0

Gracias, pero lo intenté. Encontré una solución, mira la actualización. –

34

La única opción que realmente importa para los errores de espacio PermGen es (y debe ser exactamente este ):

-XX:MaxPermSize=512m 

Una tablero, dos Gran Xs, Big-M, Big- P, Big-S, sin espacios, tamaño en megs, minúscula m. Si lo arruinas, será ignorado. El 99% de todas las correcciones de PermGen que veo que "no funcionan" se deben a que alguien no siguió las instrucciones con precisión y usó un Big-M para megabytes en lugar de un pequeño-m, o puso dos guiones en frente en lugar de uno para ejemplo.

Además, 512 megas es solo un punto de partida ... ajústelo para que se ajuste a su sistema.

+7

"** Una ** carrera, ** dos ** Big Xs, Big-M, Big-P, Big-S, sin espacios, tamaño-en-megs" me hizo jajaja, ¡agradable! –

0

Encontré toparse con el JRE a Java 8 ayudado.De forma predeterminada, Jenkins usa el JRE en la carpeta de inicio, invocada por la tarea jenkins.xml