gpt4 book ai didi

java - 如何解决 Jenkins UI 缓慢的问题?

转载 作者:行者123 更新时间:2023-12-01 12:12:35 25 4
gpt4 key购买 nike

我正在尝试解决一个问题,我希望你能用这个方法帮助我 :) 希望这也能让其他人受益。

我有一个 Jenkins 服务器正在运行(v2.46.2)。
由于某些原因,在浏览 Web UI 时,有些请求非常非常慢(长达 10 分钟)。第一次加载 UI 时似乎尤其如此。然后,它通常非常敏感。
如果您等待 10/15 分钟,第一个请求将再次变得非常缓慢。然后相当快了一段时间。

你将如何解决这个问题?
到目前为止,这是我所做的:

  • 检查主机的一般统计信息(cpu、ram 等)。一切看起来都不错。
  • 检查 Java VM 的统计信息。内存使用情况对我来说没问题。
  • 设置更好的监控来跟踪传入请求的 nb、处理它们的时间和状态代码。这确实表明某些请求被延迟(最多 10 分钟)。

  • 我从互联网上阅读了许多有趣的东西,包括: Jenkins GUI only shown after waiting for 2 minutes .在这种情况下,信息有点旧(过时?),而且由于我的工作只保留有限数量的构建,所以它没有多大帮助。

    这篇博文也 super 有趣: https://jenkins.io/blog/2016/11/21/gc-tuning/ .就我而言,我不相信问题来自垃圾收集。

    我留下了许多假设,例如:
  • 我使用了很多分类 View (使用正则表达式),也许效率低下?但这似乎不足以解释几分钟的延误。
  • 只有第一页的加载时间很长,这一事实让我觉得涉及一些缓存。但它是 html 的缓存吗?凭据?等

  • 目前,这些都只是猜测。
    理想情况下,我想以某种方式分析服务器响应请求所花费的时间。并从那里尝试找到这次去的地方。

    这可能吗?我尝试使用 VisualVM,但这仅显示全局数据,对吗?是否可以隔离用于响应请求的资源?你会如何处理它?

    注意:我正在探索 Java 世界(来自 Python)所以请不要假设我很了解 Java VM 的工作原理或您使用的工具:-)

    非常感谢!

    最佳答案

    我参加聚会晚了几年,但这似乎是一个常见问题,这似乎是搜索中出现的合理帖子,因此我将在这里发布我的经验。

    我使用以下方法调试了 Jenkins UI 缓慢:

  • 将 Jenkins 更新到最新版本以解决我在问题跟踪器和论坛中发现的所有问题,这些问题在较新版本中被标记为已修复。这并没有解决它。
  • Linux 主机上的“top”以查看使用了哪些资源。它在使用 GUI 时几乎一直显示“jenkins”的 CPU 负载为 100+%。内存似乎不是问题。
  • 内存使用量约为 4GB,因此我尝试将 Jenkins JVM 最小堆大小设置为 16GB,最大设置为 22GB(主机有 24GB)以确保内存和 GC 不是问题。事实并非如此,UI 一直很慢,而且内存使用保持在最低设置。
  • 主机上的“tcpdump”以查看它收到的请求,以及 Jenkins 是否尝试轮询某些可能响应缓慢的网络资源。一些有趣的发现,但没有真正的解决方案。
  • 使用 YourKit Java 分析器来分析 Jenkins JVM,同时手动连续访问 GUI 导致缓慢效果。收集 CPU 使用、方法调用、线程调度、内存使用的转储。通过 SSH 将探查器连接到 Jenkins JVM,效果很好。
  • 从 Github 下载 Jenkins 源代码以将分析器结果与源代码相匹配,并查看代码中的那些地方在做什么。将分析器插件和 Jenkins 源代码添加到 IntelliJ IDEA 以对其进行调试。

  • 我的发现:

    很难查明问题,因为似乎很少见。

    每个线程,分析器显示了许多线程,偶尔会有高负载,但没有一致。整体火焰图显示了一些插件在 Thread.sleep 中花费的大部分时间。这似乎有点奇怪,因为 sleep 不应该消耗 CPU。出现 YourKit shows显示它以提供所用挂钟时间的整体 View 。因此,考虑过滤 Thread.sleep 以查看真正的问题。

    火焰图显示了许多与其他所有内容交错的日志记录语句,这似乎有点可疑。查看分析器突出显示跟踪的 Jenkins 源代码,我看到 Jenkins 支持非常详细的日志记录。所以我更深入地研究了 Jenkins 日志以及如何配置它们。还考虑为探查器突出显示的部分启用跟踪(日志)以查看发生了什么。

    这些日志是 set up作为管理 Jenkins -> 系统日志 -> 日志记录器下的日志记录器。我在那里找到了以前添加的日志记录器。这是针对 Jenkins Java 包,该包一直被访问并启用了详细跟踪。可能添加以跟踪某些问题,但从未删除。记住分析器的结果,它生成的日志数量看起来很可疑,所以我删除了它。

    在此之后,Jenkins 的性能提高到了一个很好的水平。不是很即时,但很接近。非常好。因此,在这种情况下,问题在于这种过多的日志记录配置使 CPU 达到 100% 并使 GUI 缓慢爬行(我猜是在单个主线程中运行......)。 Jenkins 的主要日志在/var/log/jenkins 中,它没有显示任何日志,这也有点令人困惑,因为它是我看到的第一件事。

    这一发现当然只是一个需要检查的潜在问题。但是上述方法对我有用,并且可能更普遍有用......

    关于java - 如何解决 Jenkins UI 缓慢的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44497920/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com