我们在CI服务器(Hudson)上看到了相对较长的构建时间,它们开始妨碍我们。我知道哈德森的所作所为不仅仅是召唤Maven,而且我很高兴为这份工作提供10-20%的时间,但是放缓的命令级别似乎太多了。

任何人都知道为什么这可能是以及如何解决问题?我首先要说什么是 不是 原因:

  • 虚拟机哈德逊正在运行:在命令行上,它花费的时间大致与我的开发PC相同
  • 其他并发任务:我确保从构建任务中没有任何转移资源

MAVEN目标实际上是干净和安装的,没有像Javadoc,CheckStyle等奇特和资源密集型的目标。看着Hudson Build Task task Outsupt,当“从[我们的Nexus Artefact Reposority],“我们的Nexus Artefact Repository”中检索先前的构建编号时,似乎存在延误。但是我不知道一种简单的方法来衡量此步骤的性能并发布人工制品似乎太简单了,无法证明速度的全部差异是合理的。

(也描述了问题 这个 线)

更新:

我们已经将Hudson/Jenkins升级到了最新版本,并能够使用正时插件。精简版:

  • 好消息:我们现在知道 Nexus引起了问题
  • 坏消息:我们仍然不知道为什么

更多细节

在我们实际的Maven项目之一(Maven的构建时间:3分钟,哈德逊构建时间:9分钟)中,我们可以看到哈德森还在3分钟内执行构建,但随后需要6分钟才能将文物上传到Nexus。

使用Nexus的Web UI执行另一个文物的手动上传,我能够确认以下内容:

  • 实际的人工制品上传是在一小部分时间内完成的(即几秒钟内)
  • 在这几秒钟之后,人工制品看起来像 <nexusworkdir>/nexus/storage/test/test2/test2/1.0.0/test2-1.0.0.rpm

真正的拼图器 这就是为什么Nexus花费一分钟来创建此文件的原因:<nexusworkdir>/nexus/proxy/attributes/test/test2/test2/1.0.0/test2-1.0.0.rpm

据我所知,它只是计算出MD5和SHA1签名并记录一般人工制品信息,但是MD5SUM和SHA1SUM的75MB文件需要<1s运行...

最后,它似乎不是某种网络超时,因为延迟似乎与人工伪像大小成正比。

任何了解Nexus在收到人工制品后所做的事情都将受到赞赏。

更新2:

将Nexus日志级别设置为调试,Nexus在上传文物时将记录以下内容:

...

2011-04-05 14:38:53 DEBUG [jpsc28za2RtYQ==] -

OSNPSLFDEFAU〜-复制流动流,缓冲区大小为:4096

2011-04-05 14:39:55 DEBUG [ython-2.5.2.jar] - org.mortbay.log   

- 响应/nexus/content/groups/public/org/python/jython/2.5.2.5.2/jython-2.5.2.jar 200

2011-04-05 14:40:07 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log   

- requess/nexus/content/groups/public/org/python/jython/2.5.2.5.2/jython-2.5.2.2.2.jar.sha1 on

...

2011-04-05 14:40:12 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log   

- 响应/nexus/content/groups/public/org/python/jython/2.5.2.5.2/jython-2.5.2.2.jar.sha1 200

2011-04-05 14:43:45 DEBUG [ndex.properties] - org.mortbay.log   

- request/nexus/content/groups/public/.index/nexus-maven-repository-index.properties on org.mortbay.jetty.jetty.httpconnection@141a720

...

2011-04-05 14:44:04 DEBUG [ndex.properties] -

OSNPMMM2Group〜-公共retireveitem():: public public:/。index/nexus-maven-repository-index.properties

2011-04-05 14:44:04 DEBUG [ndex.properties] - org.mortbay.log   

- 响应/nexus/content/groups/public/.index/nexus-maven-repository-index.properties 200

2011-04-05 14:48:07 DEBUG [jpsc28za2RtYQ==] -

OSNPADEFAULTAT〜-在UID上存储属性= test:/test/test/1.0.1/test-1.0.1.rpm

...

2011-04-05 14:48:07 DEBUG [w/icon-info.gif] - org.mortbay.log   

- servlet holder = nexus

2011-04-05 14:48:08 DEBUG [w/icon-info.gif] - org.mortbay.log   

- 响应/纳克斯/ext-2.3/resources/images/default/window/icon-info.gif 200

2011-04-05 14:49:01 DEBUG [c=1302007326656] - org.mortbay.log   

- 请求/nexus/service/local/log/config on org.mortbay.jetty.httpconnection@1dbd88f ....

它似乎只是坐在那里呆了一分钟左右,而不是继续工作。任何想法,为什么Nexus都会赞赏。

有帮助吗?

解决方案

正如线程中所述,我怀疑您的分叉Maven不会通过JVM参数传递。您可以使用JConsole检查允许的最大堆是您在Maven_Opts中分配的内容吗?

如果您以服务与从命令行启动哈德森(Hudson)启动哈德森(Hudson),这有什么区别吗?

更新:

部署在Nexus上需要大量RAM,而不是编译(根据我的经验)。低记忆的交换可能是减慢它的原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top