我试图解决一个问题,我希望你能帮助我的方法:)希望这也可以使其他人受益.
我有一个Jenkins服务器运行(v2.46.2)。由于某些原因,当浏览Web UI时,一些请求非常非常慢(长达10分钟)。第一次加载UI时似乎尤其如此。然后,它通常非常响应。如果您等待10/15分钟,第一个请求将再次非常慢。然后相当快的一段时间。
你会如何解决这个问题?到目前为止,这是我所做的:
1.已检查主机的一般统计信息(CPU、RAM等)。一切正常。
1.检查了Java VM的统计信息。内存使用情况看起来不错。
1.设置更好的监控来跟踪传入请求的数量、处理它们的时间和状态代码。这确实表明一些请求会被延迟(最多10分钟)。
我从网上读到了一些有趣的东西,包括:在这种情况下,信息有点旧(过时?),由于我的工作只保留有限数量的构建,它没有多大帮助。
这篇博文也超级有趣:在我的例子中,我不相信问题来自垃圾收集。
我只剩下一些假设,例如:
1.我使用了很多分类视图(带regexp),也许效率不高?但这似乎不足以解释几分钟的延迟。
1.事实上,只有第一页是长加载让我的东西一些缓存是涉及。但它的html缓存?凭证?等等。
目前,这些都只是猜测。理想情况下,我想 * 以某种方式 * 剖析服务器回答请求所花的时间。并从那里尝试找到这些时间去了哪里。
这可能吗?我试过使用VisualVM,但是它只显示全局数据,对吗?有可能隔离用于响应请求的资源吗?你将如何处理它?
注意:我正在探索Java世界(来自Python),所以请不要假设我很了解Java VM的工作原理或您使用的工具:-)
多谢了!
1条答案
按热度按时间jgovgodb1#
我迟到了几年,但这似乎是一个常见的问题,这似乎是一个合理的职位,出现在搜索,所以我会张贴我的经验在这里。
我调试Jenkins UI缓慢使用:
我的发现:
很难准确定位问题,因为似乎几乎没有可见性。
分析器显示每个线程都有大量线程偶尔会有高负载,但没有一致性。整体火焰图显示某个插件的大部分时间都花在Thread.sleep上。这似乎有点奇怪,因为睡眠不应该消耗CPU。YourKit shows显示它似乎是为了给予所用挂钟时间的整体视图。因此,考虑过滤Thread.sleep以查看真实的的问题。
火焰图显示了很多日志记录语句与其他内容交织在一起,这看起来有点可疑。查看探查器突出显示的跟踪的Jenkins源代码,我发现Jenkins支持非常详细的日志记录。因此,我更深入地研究了Jenkins日志以及如何配置它们。还考虑为探查器突出显示的部分启用跟踪(日志),以查看正在发生的事情。
这些日志是管理Jenkins -〉系统日志-〉日志记录器下的set up日志记录器。我在那里找到了以前添加的日志记录器。这是一个Jenkins Java包,该包一直被访问,并启用了详细跟踪。可能是为了跟踪某个问题而添加的,但从未删除。记住分析器结果,它生成的日志数量看起来可疑,所以我删除了它。
在此之后,Jenkins的性能提高到了一个很好的水平。虽然不是很快,但很接近。非常好。所以在这种情况下,问题是这个额外的日志配置,这是采取100%的CPU和缓慢的GUI爬行(运行在单个主线程中,我猜...)。主要的Jenkins日志在/var/log/Jenkins中,它没有显示任何日志,这也有点令人困惑,因为这是我首先看的东西之一。
这个发现当然只是一个需要检查的潜在问题。但是上面的方法对我很有效,而且可能更普遍地有用。