Performance 如何调试生成计算机的错误设置的性能?

Performance 如何调试生成计算机的错误设置的性能?,performance,maven,build,hudson,artifactory,Performance,Maven,Build,Hudson,Artifactory,我们必须有规律地设置新的构建环境,而这个过程似乎并不那么简单。今天我有了一个新的构建机器,第一个Maven构建非常缓慢,我想澄清为什么性能如此糟糕。但如何做到这一点呢 我们的背景是: 我们使用多个构建机器,每个项目都有自己的构建机器 每个构建机器都有类似的设置,因此项目可以立即启动,而不需要进行大量配置 我们预先配置了以下工具: 哈德逊(目前为2.1.1,但将有所改变) 人工2.3.3.1 声纳 Hudson、Artifactory和Sonar都有自己的Tomcat配置 Maven 2.2.

我们必须有规律地设置新的构建环境,而这个过程似乎并不那么简单。今天我有了一个新的构建机器,第一个Maven构建非常缓慢,我想澄清为什么性能如此糟糕。但如何做到这一点呢

我们的背景是:

  • 我们使用多个构建机器,每个项目都有自己的构建机器
  • 每个构建机器都有类似的设置,因此项目可以立即启动,而不需要进行大量配置
  • 我们预先配置了以下工具:
    • 哈德逊(目前为2.1.1,但将有所改变)
    • 人工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客户端
所有工具应协同工作,尤其是存储库链应:

  • 构建机器Maven存储库
  • 造机厂
  • 中央公司人工工厂(作为世界的镜像和缓存)
  • Maven central(和其他存储库)
  • 因此,当Maven构建需要解决依赖关系时,它将首先在本地Maven repo中查找,然后在本地人工repo中查找,然后在中央人工repo中查找,然后在internet上查找

    我们通常必须使用代理连接到internet,我们的intranet中不需要它

    第一个构建(Maven Hello World)大约在45分钟内完成。在那个时候,所有的自举都发生了,但我会认为通过使用我们的存储库链(中央存储库被很好地填满了),构建会快得多。所以我认为调试的重点将是网络,本地构建不是问题。所以Maven和Artifactory的配置和交互正在考虑之中


    如何调试这样的环境?我可以访问构建机器(如sudo)和中央存储库,但我不知道如何开始、证明什么、在哪里查找。那么,您的经验是什么,您想分享哪些技巧和窍门呢?

    以下是我迄今为止所做的几件事。如果您有其他建议,欢迎光临

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

    • 本地计算机(hello world程序)上的实际构建可能以毫秒为单位,但以分钟为单位
    • 网络起着重要作用,所以首先攻击它
    如果在本地找不到某些东西,那么存储库链很有趣。以下是确保情况属实的步骤:

    • 对于Maven,删除本地缓存的内容。如果本地缓存已填充,则不知道是否在本地缓存或其他位置找到资源。(如果其他一切都恢复正常,至少在最后这样做。)
    • 对于Artifactory,也可以找到该缓存,并通过删除其内容来清理它。它只是一个缓存,因此将以新的方式填充
    • 如果使用智能浏览器测量查找,请确保您请求的内容不在浏览器的缓存中
    • 否则,使用类似于
      wget
      的工具请求资源
    • 尽量减少故障源。因此,尝试将长距离的查找划分为您控制的较小部分
    • 不要使用Maven进行查找,首先从Artifactory存储库开始(仅限),然后再使用Maven
    这导致了我想做的以下测试。每次我确保满足之前的先决条件时:

  • 询问
    https:///repo/
    。期望:

    • 本地查找将失败,因此必须在中心公司Artifactory的远程存储库中查找资源
    • 可能的影响可能来自代理、人工查找
    结果:查找一个简单的POM需要约30秒。这太过分了

  • 删除代理。使用
    wget
    ,有一个选项
    ——无代理
    ,它就可以做到这一点。期望:

    • 更快的查找
    结果:根本没有变化,所以代理不是原因

  • 询问
    https:///libs-snapshots-company/
    。因此,将虚拟存储库更改为真正的远程存储库。期望:

    • Artifactory知道在哪里进行查找,因此速度会快得多
    结果:立即找到POM,因此30秒是人工查找。但这是什么原因呢

  • 在Artifactory中删除了所有远程和虚拟存储库(只剩下我们公司的存储库和缓存的Maven central)。但请再次使用
    https:///repo/
    。期望:

    • Artifactory将更快地找到存储库
    结果:POM在瞬间出现,无法测量

  • 我当时很勇敢,刚开始构建(本地缓存为空)。构建需要5秒(而不是当天早上15分钟)


  • 所以我想我现在更好地理解了什么会出错,还有很多问题要问。请添加您的想法作为答案,您将因此获得声誉

    当通过虚拟存储库引用时,Artifactory解析项目所需的时间取决于所请求的工件以及所述虚拟聚合的真实存储库。例如,当请求maven元数据时,Artifactory必须迭代所有嵌套的真实存储库,并合并它找到的所有相关元数据,这可能需要一点时间。添加一些远程存储库,从中解析需要时间;也许您的远程存储库链包括一些较慢的存储库?如前所述,远程存储库可能会延迟解析时间。要解决这个问题,你可以做以下几件事