2012-06-21 52 views
15

我曾經遇到Jenkins失敗的情況,但Jenkins重新部署(Jenkins是Tomcat中的web應用程序)。即使是新的作業也會因PermGen空間錯誤而失敗,但所有設置都沒有問題(所有這些參數都可以使用到這些-XX:PermSize參數)。重新部署之後,所有事情都像魅力一樣。但這是一個苛刻的解決方案。我想知道,如果有一些選擇回滾詹金斯狀態。提前致謝。Jenkins中的PermGen錯誤

更新:好的,對於那些可能會遇到類似情況的人來說,這裏就是我的想法。那些寫道最好將Jenkins部署爲Tomcat模塊的人可能不會遇到任何類型的項目部署(使用Jenkins Deploy插件或使用Maven的pom.xml中的tomcat-maven-plugin)的問題。當我單獨安裝Jenkins時,我沒有遇到任何問題。呼!

+0

你在ubuntu下運行嗎?如果是的話,你需要覆蓋/ etc/default/tomcat設置。否則,您可以嘗試運行帶有Jrockit JVM的tomcat,該JVM不會遇到permgenspace問題。 – jocelyn

+0

@jocelyn是的,這是Ubuntu,我試圖覆蓋這些設置。 Jrockit可能是一個解決方案,因爲Jenkins而改變JVM仍然有點奇怪。 –

回答

6

我曾經遇到類似的錯誤:jenkins正在執行maven構建,其中包括surefire測試執行。我發現我使用的maven版本(V2的東西)沒有將我的JVM內存選項傳遞給surefire進程fork,並且一些測試因此失敗。 MAVEN_OPTS,JAVA_OPTS,都沒有工作。

我最終直接在settings.xml中傳遞了我的內存選項,並且PermGen錯誤消失了。

下面是我所使用的選項(該應用程序是相當大):

-Xms512m -Xmx1024m -XX:PermSize =512米-XX:MaxPermSize參數=1024米

+1

謝謝,也許我會需要,但在我的情況下,PermGen總是出現在最開始,而不是執行測試或其他事情。 –

4

完全未經檢驗的建議,但this answer建議使用-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled當啓動Tomcat時(雖然在完全不同的上下文中的問題)。但是,This answer表明在Java 6上不需要CMSPermGenSweepingEnabled,並且-XX:+UseConcMarkSweepGC必須用於CMSClassUnloadingEnabled才能生效。

至少-XX:+CMSClassUnloadingEnabled可以做到這一點,假設底層問題是由於在Tomcat實例的PermGen空間中不必要地維護類而引起的。

+0

謝謝,但我嘗試過。我找到了解決方案,請參閱更新。 –

34

的一個設置,真正重要的PermGen space的錯誤,是(而且必須是這個正是):

-XX:MaxPermSize=512m 

一個破折號,2個大XS,大-M,大端P,Big-S,無空格,尺寸大小,小寫字母 m。如果你搞砸了,它將被忽略。我發現「不工作」的所有PermGen修復中的99%是因爲有人沒有按照指示精確地使用Big-M而不是使用Big-M,而是使用Big-M而不是使用Big-M,例。

此外,512兆只是一個起點...適應您的系統。

+7

「**一** **,**兩**大X,大M,大P,大S,無空格,大小在megs」讓我大聲笑,很好! –

0

我發現撞JREJava 8幫助。默認情況下,Jenkins使用主文件夾下的JRE,由jenkins.xml任務調用