Jenkinsに障害が発生したケースがあり、Jenkinsの再デプロイ(JenkinsはTomcatのWebアプリ)以外は役に立ちませんでした。新しいジョブでさえPermGenスペースエラーで失敗しましたが、すべての設定は問題ありませんでした(可能な限り、これらすべての-XX:PermSize
パラメーター)。重要なのは、再展開後、すべてが魅力のように機能したことです。しかし、それは厳しい解決策です。 Jenkinsの状態をロールバックするオプションがあるかどうかを知りたいと思いました。前もって感謝します。
更新:さて、そのようなことに直面するかもしれない人々のために、これが私が理解したことです。 JenkinsをTomcatモジュールとしてデプロイする方が良いと書いた人は、おそらくどのような種類のプロジェクトデプロイメントの問題にも直面していません(JenkinsDeployプラグインまたはMavenのTomcat-maven-plugin
のpom.xml
を使用)。 Jenkinsを個別にインストールしたときに説明した問題はありませんでした。ふぅ!
PermGenスペースエラーで本当に重要な設定は次のとおりです(そして、これは正確にでなければなりません):
-XX:MaxPermSize=512m
1ダッシュ、2 Big Xs、Big-M、Big-P、Big-S、スペースなし、size-in-megs、小文字 m。あなたがそれを台無しにした場合、それは無視されます。すべてのPermGen修正の99%が「機能しない」のは、誰かが指示に正確に従わず、big-Mをlittle-mではなくメガバイトで使用したか、ダッシュを1つではなく2つ前に置いたためです。例。
また、512メガバイトは出発点にすぎません...システムに合わせて調整してください。
私はかつて同様のエラーを経験しました:jenkinsは確実なテストの実行を含むMavenビルドを実行していました。私が使用していたバージョンのMaven(V2のもの)がJVMメモリオプションをsurefireプロセスフォークに渡さなかったことを発見しました。これが原因で一部のテストが失敗していました。 MAVEN_OPTS、Java_OPTS、どれも機能しませんでした。
結局、settings.xmlでメモリオプションを直接渡すことになり、PermGenエラーはなくなりました。
これが私が使用したオプションです(アプリはかなり大きかったです):
-Xms512m -Xmx1024m -XX:PermSize = 512m -XX:MaxPermSize = 1024m
完全にテストされていない提案ですが、 この回答 はTomcatを起動するときに_-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
_を使用することを提案しています(完全に異なるコンテキストでの問題ではありますが)。 この回答 ただし、Java 6ではCMSPermGenSweepingEnabled
は不要であり、CMSClassUnloadingEnabled
を有効にするには_-XX:+UseConcMarkSweepGC
_を使用する必要があることを示しています。
少なくとも_-XX:+CMSClassUnloadingEnabled
_は、根本的な問題が、TomcatインスタンスのPermGenスペースで不必要に維持されているクラスによって引き起こされていると想定してトリックを実行する可能性があります。
多分この質問はあなたを助けることができます:
Windowsでサービスとして開始されたときに、Jenkinsにヒープスペースを増やすにはどうすればよいですか?
そこにはいくつかの非常に良い答えがあります。
JRE
をJava 8
にぶつけることが役に立ったことがわかりました。デフォルトでは、Jenkinsはjenkins.xml
タスクによって呼び出されるホームフォルダーの下のJRE
を使用します
LinuxのPermGen
エラーをjenkins.conf
に追加することで解決しました:
wrapper.Java.additional.4=-XX:PermSize=1024M