如何调试构建机器错误设置的性能?

时间:2011-10-05 19:16:00

标签: performance maven build hudson artifactory

我们必须定期设置新的构建环境,这个过程似乎并不那么简单。今天我有一台新的构建机器,第一个Maven构建速度很慢,我想澄清为什么性能如此糟糕。但是怎么做呢?

我们的背景是:

  • 我们使用多个构建机器,每个项目都有自己的。
  • 每台构建机器都有类似的设置,因此项目可以立即启动,而不必配置很多。
  • 我们预先配置了以下工具:
    • Hudson(目前2.1.1,但会改变)
    • Artifactory 2.3.3.1
    • 声纳
    • Hudson,Artifactory和Sonar配置了自己的Tomcat
    • Maven 2.2.1和Maven 3.0.3(没有用户配置,只有安装有settings.xml
    • Ant 1.7.1和Ant 1.8.2(此处不相关)
    • Subversion 1.6客户端

所有工具应该协同工作,特别是存储库链应该是:

  1. 构建机器Maven存储库
  2. 构建机器Artifactory
  3. 中央公司Artifactory(作为镜子和缓存为世界工作)
  4. Maven central(和其他存储库)
  5. 因此,当Maven构建需要解决依赖关系时,它将首先在本地Maven仓库中查找,然后在本地Artifactory仓库中查找,然后在中央Artifactory仓库中查找,然后才在互联网上查找。

    我们通常必须使用代理连接到互联网,我们的内联网不需要它。

    第一个版本(Maven Hello World)大约需要45分钟。在那个时候,所有引导都在发生,但我想通过使用我们的存储库链(中央存储库已经充分填充),构建会更快。所以我认为调试的重点将是网络,本地构建不是问题。因此,正在考虑Maven和Artifactory的配置和交互。

    你如何调试这样的环境?我可以访问构建机器(如sudo)和中央存储库,但我不知道如何启动,要证明什么,在哪里查看。那么您的经验是什么,您希望分享哪些提示和技巧?

1 个答案:

答案 0 :(得分:0)

以下是我迄今为止所做的一些事情。如果您有其他建议,欢迎您!

我怀疑存储库链是邪恶的来源,所以我首先解决了这个问题。原因是:

  • 本地计算机(hello world程序)的真实版本可能会在几毫秒内完成,但不会分钟。
  • 网络有所作为,所以先攻击。

如果在本地找不到某些东西,那么存储库链很有意思。以下是确保这种情况的步骤:

  • 对于Maven,删除本地缓存的内容。如果填充了本地缓存,则无法知道是否在本地缓存中或其他位置找到了资源。 (至少在最后,如果其他一切都再次起作用那么这样做。)
  • 对于Artifactory,也要找到该缓存,并通过删除其内容来清除它。它只是一个缓存,所以它将被填充一个新的。
  • 如果您使用聪明的浏览器来测量查找,请确保您要求的内容不在浏览器的缓存中。
  • 否则,请使用wget之类的工具来索取资源。
  • 尽量减少失败的来源。因此,请尝试将查找的长距离划分为您控制的较小段。
  • 不要使用Maven进行查找,首先使用Artifactory存储库(仅限),然后再使用Maven。

这导致我想做的以下测试。每当我确保满足之前的先决条件时:

  1. 询问https://<my-project-artifactory>/repo/<my-pom>。期望:

    • 本地查找将失败,因此必须在中央公司Artifactory的远程存储库中找到该资源。
    • 可能的影响可能来自代理,神器查找。

    结果:查找一个简单的POM需要~30秒。这太过分了。

  2. 删除代理。使用wget,有一个选项--no-proxy可以做到这一点。厚望:

    • 更快的查找。

    结果:完全没有变化,因此代理不是原因。

  3. 询问https://<my-project-artifactory>/libs-snapshots-company/<my-pom>。因此,将虚拟存储库更改为真正的远程存储库。期望:

    • Artifactory知道在哪里进行查找,因此速度会快得多。

    结果:立即找到POM,因此30秒是Artifactory进行查找。但这可能是什么原因?

  4. 在Artifactory中删除了所有远程和虚拟存储库(仅留下我们的公司和缓存的Maven中心)。但请再次使用https://<my-project-artifactory>/repo/<my-pom>。期望:

    • Artifactory会更快地找到存储库。

    结果:POM瞬间出现,无法衡量。

  5. 然后我勇敢地开始构建(本地空缓存)。然后构建需要5秒(而不是同一天早上15分钟)。

  6. 所以我认为我现在已经更好地理解了可能出现的问题,还有很多问题需要解决。请将您的想法添加为答案,您将获得声誉!