ハドソン「MVNクリーンインストール」ビルドがコマンドラインで同じものよりも3〜6倍長くなるのはなぜですか?
-
10-10-2019 - |
質問
CIサーバー(Hudson)で比較的長いビルド時間があり、彼らは私たちの邪魔をし始めています。ハドソンはマベンを呼び出す以上のことをしていることを知っています。そして、私は喜んで仕事に10〜20%の時間を与えますが、数桁の減速が多すぎるようです。
なぜこれがなぜあるのか、そして問題を解決する方法についてのアイデアを持っていますか?私は何が何であるかを言うことから始めます いいえ 原因:
- 仮想マシンハドソンが実行されています:コマンドラインでは、私の開発PCとほぼ同じ時間がかかります
- その他の同時タスク:ビルドタスクからリソースをそらすものは何もないことを確認しました
Mavenの目標は文字通りクリーンでインストールされており、Javadoc、CheckStyleなどの派手でリソース集中的なものは何もありません。ハドソンビルドタスクコンソール出力を見ると、「[Nexus Artefact Prository]から以前のビルド番号を取得する」と遅延があるようです。しかし、私はこのステップのパフォーマンスを測定する簡単な方法を知りません。アーティファクトを公開することは、速度の全体的な違いを正当化するにはあまりにも単純すぎる操作のようです。
(問題も説明しています これ スレッド)
アップデート:
Hudson/Jenkinsを最新リリースにアップグレードし、タイミングプラグインを使用することができました。短縮版:
- 良いニュース:私たちは今知っています ネクサスは問題を引き起こしています
- 悪いニュース:私たちはまだ理由を知りません
詳細
実際のMavenプロジェクトの1つ(Mavenビルド時間:3分、ハドソンビルド時間:9分)では、ハドソンも3分でビルドを実行することがわかりましたが、ArtefactをNexusにアップロードするのに6分かかります。
NexusのWeb UIを使用して別のアーティファクトの手動アップロードを実行すると、以下を確認することができました。
- 実際のアーティファクトアップロードは、ほんの少しの時間で実行されます(つまり、数秒で)
- これらの数秒後、アーティファクトは次のように表示されます
<nexusworkdir>/nexus/storage/test/test2/test2/1.0.0/test2-1.0.0.rpm
本当のパズル Nexusがこのファイルを作成するのに1分以上かかる理由です。<nexusworkdir>/nexus/proxy/attributes/test/test2/test2/1.0.0/test2-1.0.0.rpm
私が知る限り、それはMD5とSHA1の署名を計算し、一般的なアーティファクト情報を記録するだけですが、75MBファイルのMD5SUMとSHA1SUMは実行されます...
最後に、遅延はアーティファクトサイズにほぼ比例しているように見えるため、何らかのネットワークタイムアウトのようには見えません。
Nexusがアーティファクトを受け取った後に何をするかは高く評価されています。
更新2:
Nexusログレベルを設定してデバッグするには、Nexusがアーティファクトがアップロードされたときに次のことを記録します。
... 2011-04-05 14:38:53 DEBUG [jpsc28za2RtYQ==] -
osnpslfdefau〜-バッファサイズのコピーストリーム:4096
2011-04-05 14:39:55 DEBUG [ython-2.5.2.jar] - org.mortbay.log
-Respons/nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar 200
2011-04-05 14:40:07 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log
- リクエスト/nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 on
... 2011-04-05 14:40:12 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log
-Respons/nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 200
2011-04-05 14:43:45 DEBUG [ndex.properties] - org.mortbay.log
-cong.mortbay.jetty.httpconnection@141a720のリクエスト/nexus/content/groups/public/.index/nexus-maven-repository-index.properties
... 2011-04-05 14:44:04 DEBUG [ndex.properties] -
osnpmmm2group〜- public retiveItem():: fund public:/。index/nexus-maven-repository-index.properties
2011-04-05 14:44:04 DEBUG [ndex.properties] - org.mortbay.log
-Respons/nexus/content/groups/public/.index/nexus-maven-repository-index.properties 200
2011-04-05 14:48:07 DEBUG [jpsc28za2RtYQ==] -
osnpadefaultat〜- uid = test:/test/test/1.0.1/test-1.0.1.rpmに属性を保存する
... 2011-04-05 14:48:07 DEBUG [w/icon-info.gif] - org.mortbay.log
- サーブレットホルダー= nexus
2011-04-05 14:48:08 DEBUG [w/icon-info.gif] - org.mortbay.log
-respons/nexus/ext-2.3/resources/images/default/window/icon-info.gif 200
2011-04-05 14:49:01 DEBUG [c=1302007326656] - org.mortbay.log
-lequest/nexus/service/local/log/config on org.mortbay.jetty.httpconnection@1dbd88f。
それはただそこに座っているだけで、その仕事を続けているよりも。 Nexusがこれを行う理由は、どのようなアイデアを感謝していますか。
解決
スレッドで説明したように、私はあなたのフォークされたMavenがJVMパラメーターを渡されていないのではないかと疑っています。 JConsoleを使用して、Maven_optsで割り当てたものが許可されている最大ヒープを確認できますか?
ハドソンをサービスとして開始する場合、コマンドラインからハドソンを開始する場合、それは何らかの違いをもたらしますか?
アップデート:
Nexusに展開するには、コンパイルよりもはるかに多くのRAMが必要です(私の経験では)。低いメモリのスワッピングは、それを遅くしているものかもしれません。