Jenkins API响应调优

时间:2017-02-10 00:42:11

标签: java linux web-services jenkins jenkins-api

我们在Jenkins之上构建了一个仪表板,使用户只能看到与项目相关的作业,并触发构建。 UI使用reactJS构建,后端是JAVA REST WebServices。

WebService调用Jenkins api来获取Job信息并将数据转换为JSON以提供UI。目前我们在仪表板上有大约200个工作岗位。它花了约2分钟让Jenkins API回复细节。

Jenkins正在Linux机上运行

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

Jenkins版本 - 1.564,包含16个执行程序和超过2000个作业

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

为200个作业调用api 200次以获取每个作业的详细信息。

有关如何加快API响应的任何建议。

我考虑过在Linux机器上增加RAM并调整JVM OPTS。还将Jenkins升级到最新的LTS。

2 个答案:

答案 0 :(得分:2)

低调的果实:

  1. 并行运行请求,即不是一个接一个。
  2. 如果您这样做并且使用标准jetty container,请尝试使用--handlerCountMax选项增加工作进程数(默认值为40)。
  3. 最终,您应该尝试避免执行200个单独的请求。根据您的设置,仅针对每个请求进行安全检查会导致大量开销。

    因此,最干净的解决方案是从主服务器上的单个Groovy脚本收集所需的所有数据(您也可以通过REST执行此操作):

    • 这会减少1个
    • 的请求数
    • 它允许进一步优化,可能绕过上面Jon S的评论中提到的问题

答案 1 :(得分:1)

由于您似乎没有在服务器上遇到任何延迟加载问题(因为每个作业只有60个版本),所以问题可能与Alex O建议的开销有关。 Alex O建议在一个请求中完成所有操作。这可以通过以下请求完成:

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

我们使用jenkins API,而不是依赖于作业API,我们可以在一个请求中获取所有作业的数据。