2017-02-10 5 views
0

Jenkinsの上にダッシュボードを作成しました。これにより、ユーザーはプロジェクトに関連するジョブのみを表示し、ビルドを開始できます。 UIはreactJSを使用して構築され、バックエンドはJAVA REST WebServicesです。Jenkins APIの応答調整

WebServiceはJenkins APIを呼び出してジョブ情報を取得し、そのデータをJSONに変換してUIに供給します。現在、ダッシュボードには約200のジョブがあります。 Jenkins APIが詳細に対応するのに約2分かかります。

ジェンキンスは

OracleLinux 6 x Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz/39.25 GB 

ジェンキンスバージョンのLinuxボックス上で実行されている - APIはの詳細を取得するために200のジョブのために200回と呼ばれる16のexecutorおよび2000の以上のジョブ

Sample API Call - http://jenkins:8080/job/jobName/api/json?tree=displayName,builds[result],lastBuild[estimatedDuration,result,duration,number,timestamp,actions[causes[userName]]] 

で1.564それぞれの仕事。

API応答のスピードアップに関するアドバイス

私は、Linuxボックス上でRAMを増やし、JVMのOPTSを調整することを検討しました。また、Jenkinsを最新のLTSにアップグレードします。

+1

あなたの仕事には多くのビルドがありますか?私はJenkinsチームがビルドの遅延読み込みに取り組んでいることは知っていますが、どのバージョンにこれらの改善があるのか​​わかりません。例えば。ジョブをロードするとすぐにすべてのビルドがロードされます。新しいバージョンでは、レンダーページ/クエリを表示するのに必要なものを読み込みます。また、ツリークエリの 'builds [result]'部分は危険です。これは、古いバージョン(レイジーローディングを伴う)では、ジョブがすべてのビルドを強制的にロードするためです。この理由は、ページングが行われなかったことである。それ以降のバージョンでは返すビルドの範囲を指定する必要がありますが、デフォルトは20です。 –

+0

私たちはジョブごとに30のビルドの履歴を保持しています。私はすべてのプラグインが互換性がない可能性があるので、Jenkinsのコアをアップグレードすることを心配しています。私たちはいくつかのプラグインを使って動作させています。 – Upen

+0

さて、それは怠惰な読み込みではない、30のビルドはあまりないです。実際には1000以上のビルドを持つジョブの問題です。 –

答えて

2

低ぶら下げフルーツ:

  1. は、すなわち、並列に次々ないものを要求を実行します。
  2. 標準jetty containerを使用している場合は、人数の作業者プロセス--handlerCountMaxオプション(デフォルトは40)で増やしてみてください。

結局、あなたは200の個々の要求を実行避けるべきです。設定に応じて、すべてのリクエストだけのセキュリティチェックによって大幅なオーバーヘッドが発生する可能性があります。

  • が、これは数を減らし:

    したがって、きれいな解決策は、あなたがマスター上の単一のGroovyスクリプトから必要なすべてのデータを収集することになります(あなたはまた、RESTを経由していることを行うことができます) 1

  • への要求と、それはあなたがあなたの上に任意の遅延ロードの問題を打つていないようにそれはそうと、おそらく
+0

Javaの方が多いので、200回の奇数呼び出しのforループを削除し、CountdownLatchを使用して1回の呼び出しでそれを実行します。あなたは投稿し続けるでしょう。ありがとう。 – Upen

+0

私は、変更を加えて2分から数秒までスピードを向上させることができました。 – Upen

+1

フィードバックいただきありがとうございます。それはまともなスピードアップです:) –

1

上記のジョン・Sのコメントで述べた問題を回避し、さらに最適化することができますrサーバー(ジョブごとに60個のビルドしかないため)、問題はおそらくアレックスOが提案しているオーバーヘッドに関係しています。また、Alex O氏は1回のリクエストですべてをやるよう提案しました。

http://jenkins:8080/api/json?tree=jobs[displayName,builds[result],lastBuild[estimatedDuration,result,duration,number,timestamp,actions[causes[userName]]]] 

の代わりに、我々は、単一のリクエストですべてのジョブのデータをフェッチすることができますジェンキンスのAPIを使用したジョブAPIに依存する:これは、次のリクエストを行うことができます。

+0

ニース:)私は、あなたが一度のリクエストでいくつかの仕事の結果を得ることができるか分からなかった。 –

関連する問題