我们在CI服务器(哈德森)上看到相对较长的构建时间,并且它们开始妨碍我们。我知道哈德森所做的不仅仅是调用maven而且我很乐意给它10-20%的时间来完成这项工作,但是一个数量级的减速似乎太多了。
任何人都知道为什么会这样,以及如何解决问题?我将首先说明不原因:
maven的目标非常干净和安装,没有任何花哨和资源密集,如javadoc,checkstyle等。查看hudson构建任务控制台输出,当“从[我们的Nexus artefact存储库中检索以前的构建号码时”似乎有延迟]“,但我不知道一个简单的方法来衡量这一步的表现,发布一个人工制品似乎太简单了,无法证明速度的总差异。
(问题也在this线程中描述)
更新
我们已将Hudson / Jenkins升级到最新版本,并且已经能够使用计时插件。简短版本:
更多详情
在我们的一个真正的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签名并记录一般的人工制品信息,但75MB文件的md5sum和sha1sum需要&lt; 1s来运行...
最后,它似乎不是某种网络超时,因为延迟似乎与人工制品大小成正比。
任何知道nexus在收到人工制品后所做的事情都很受欢迎。
更新2 :
将nexus日志级别设置为debug,nexus会在上传人工制品时记录以下内容:
... 2011-04-05 14:38:53 DEBUG [jpsc28za2RtYQ==] -
o.s.n.p.s.l.f.Defau~ - 复制缓冲区大小为: 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/jython-2.5.2.jar 200
2011-04-05 14:40:07 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log
- 请求/nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 上
... 2011-04-05 14:40:12 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log
- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 200
2011-04-05 14:43:45 DEBUG [ndex.properties] - org.mortbay.log
- 请求/nexus/content/groups/public/.index/nexus-maven-repository-index.properties 上 org.mortbay.jetty.HttpConnection@141a720
... 2011-04-05 14:44:04 DEBUG [ndex.properties] -
o.s.n.p.m.m.M2Group~ - public retrieveItem():: FOUND 公共:/索引/ nexus-maven-repository-index.properties
2011-04-05 14:44:04 DEBUG [ndex.properties] - org.mortbay.log
- RESPONSE /nexus/content/groups/public/.index/nexus-maven-repository-index.properties 200
2011-04-05 14:48:07 DEBUG [jpsc28za2RtYQ==] -
o.s.n.p.a.DefaultAt~ - 存储属性 UID =试验:/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
- RESPONSE /nexus/ext-2.3/resources/images/default/window/icon-info.gif 200
2011-04-05 14:49:01 DEBUG [c=1302007326656] - org.mortbay.log
- REQUEST / nexus / service / local / log / config on org.mortbay.jetty.HttpConnection@1dbd88f ....
似乎只是坐在那里一分钟左右,而不是继续工作。任何想法为什么nexus这样做是值得赞赏的。
答案 0 :(得分:2)
正如线程中所讨论的,我怀疑你的分叉Maven没有传递JVM参数。您是否可以使用jconsole检查您在MAVEN_OPTS中分配的最大堆容量?
如果您将Hudson作为服务启动而不是从命令行启动Hudson,这会有什么不同吗?
<强>更新强>:
在Nexus上部署需要大量内存,而不是编译(根据我的经验)。低内存的交换可能会减慢它的速度。