有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决Jenkins用户界面缓慢的问题?

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

我有一个Jenkins服务器正在运行(v2.46.2)。 由于某些原因,在浏览Web UI时,有些请求非常慢(最多10分钟)。第一次加载UI时,情况似乎尤其如此。然后,它通常是非常灵敏的。 如果您等待10/15分钟,第一个请求将再次非常缓慢。然后很快就过去了

您将如何对此进行故障排除? 到目前为止,我就是这么做的:

  1. 检查了主机的一般统计数据(cpu、ram等)。看起来一切正常
  2. 检查了Java虚拟机的统计信息。内存使用在我看来还行
  3. 设置更好的监控,以跟踪传入请求的nb、处理时间和状态代码。这确实表明,有些请求会被延迟(最多10分钟)

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

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

我还有一些假设,比如:

  1. 我使用了很多分类视图(使用regexp),可能效率很低?但这似乎不足以解释几分钟的延误
  2. 事实上,只有第一个页面很长才能加载,这让我想起了一些缓存。但这是html的缓存吗?有资格证书吗?等等

目前,这些只是猜测。 理想情况下,我希望以某种方式描述服务器应答请求所花费的时间。试着从那里找到这一次要去的地方

这有可能吗?我试过使用VisualVM,但这只显示全球数据,对吗?是否可以隔离用于响应请求的资源?你会怎么做

注意:我正在发现Java世界(来自Python),所以请不要以为我很了解Java虚拟机的工作原理或您使用的工具:-)

非常感谢


共 (1) 个答案

  1. # 1 楼答案

    我在派对上迟到了几年,但这似乎是一个常见的问题,而且这似乎是搜索时出现的一个合理的帖子,所以我将在这里发布我的经历

    我使用以下方法调试Jenkins用户界面慢度:

    • 将Jenkins更新至最新版本,以解决我在问题追踪器和论坛中发现的所有问题,这些问题在新版本中被标记为已修复。这并没有解决它

    • 在Linux主机上单击“top”,查看使用了哪些资源。在使用GUI时,“詹金斯”几乎一直都有100%以上的CPU负载。记忆似乎不是问题

    • 内存使用量大约为4GB,所以我尝试将Jenkins JVM最小堆大小设置为16GB,最大堆大小设置为22GB(主机有24GB),以确保内存和GC不成问题。事实并非如此,UI一直都很慢,内存使用保持在最低设置

    • “tcpdump”来查看它收到了什么请求,以及Jenkins是否尝试轮询一些可能响应缓慢的网络资源。一些有趣的发现,但没有真正的解决方案

    • 使用YourKit Java profiler评测Jenkins JVM,同时手动连续访问GUI以产生缓慢效果。收集CPU使用、方法调用、线程调度和内存使用的转储。通过SSH将探查器连接到Jenkins JVM,效果很好

    • 从Github下载Jenkins源代码,以将探查器结果与源代码匹配,并查看代码中的这些地方在做什么。在IntelliJ IDEA中添加了探查器插件和Jenkins源代码来调试它们

    我的发现:

    由于能见度似乎很低,很难确定问题的具体位置

    对于每个线程,分析器显示了大量线程,偶尔会出现高负载,但没有一致性。整体火焰图显示了花在线程上的大部分时间。睡一会儿。这似乎有点奇怪,因为睡眠不应该消耗CPU。似乎YourKit shows显示了它以提供所用挂钟时间的总体视图。因此,考虑过滤线程。睡一觉,看看真正的问题

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

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

    在这之后,詹金斯的表现提高到了一个很好的水平。不是很快,而是很近。非常好。因此,在本例中,问题在于过度的日志记录配置将CPU占用到100%,并将GUI拖慢到爬行状态(我猜是在单个主线程中运行)。Jenkins的主要日志位于/var/log/Jenkins中,它没有显示任何日志,这也有点让人困惑,因为这是我首先看到的内容之一

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