【问题标题】:Jenkins API response tuningJenkins API 响应调优
【发布时间】:2017-02-10 00:42:10
【问题描述】:

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

WebService 调用 Jenkins api 来获取 Job 信息并将数据转换为 JSON 以提供给 UI。目前,我们在仪表板上有大约 200 个工作。 Jenkins API 需要大约 2 分钟来响应详细信息。

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 个 Job 调用 200 次 api 以获取每个作业的详细信息。

关于如何加快 API 响应速度的任何建议。

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

【问题讨论】:

  • 你的工作有很多构建吗?我知道 Jenkins 团队一直在处理构建的延迟加载,但不知道哪些版本有这些改进。例如。一旦您加载作业,它将加载所有构建。在较新的版本中,它会加载呈现呈现页面/查询所需的内容。此外,树查询中的builds[result] 部分可能会更加危险,因为在旧版本(延迟加载)中,这会强制作业加载所有构建。原因是没有进行分页,例如在以后的版本中,您必须指定要返回的构建范围,我认为默认为 20。
  • 我们保留了每个作业 30 次构建的历史记录。我只是担心升级 Jenkins 核心,因为所有插件可能不兼容。我们正在使用几个插件来完成工作。
  • 好吧,那就不是懒加载了,30个构建也不算多。只有 1000 多个构建的工作才是真正的问题。

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


【解决方案1】:

唾手可得的果实:

  1. 并行运行请求,即不是一个接一个。
  2. 如果您这样做并且使用标准jetty container,请尝试使用--handlerCountMax 选项增加工作进程数(默认为40)。

最终,您应该尝试避免执行 200 个单独的请求。根据您的设置,单独对每个请求进行安全检查可能会导致大量开销。

因此,最简洁的解决方案是从主服务器上的单个 Groovy 脚本收集您需要的所有数据(您也可以通过 REST 来做到这一点):

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

【讨论】:

  • 作为一个 Java 人,我将尝试删除 200 个奇数调用的 for 循环,并使用 CountdownLatch 一次性完成。将及时向大家发布。谢谢。
  • 我能够通过更改将速度从 2 分钟提高到几秒钟。
  • 感谢您的反馈。这是一个不错的加速:)
【解决方案2】:

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

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

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

【讨论】:

  • 很好 : ) 我不知道您可以在一个请求中获得多个工作的结果。
猜你喜欢
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多