Почему сборка Hudson «MVN Clean Install» занимает 3-6x длиннее, чем в командной строке?

StackOverflow https://stackoverflow.com/questions/4388135

Вопрос

Мы видим относительно длительное время сборки на нашем CI -сервере (Гудзон), и они начинают мешать нам. Я знаю, что Хадсон делает больше, чем призыв к Мавену, и я с радостью предоставит ему на 10-20% больше времени для работы, но замедление порядка кажется слишком большим.

У кого -нибудь есть представление о том, почему это может быть и как решить проблему? Я начну с того, что скажу, что нет причина:

  • Виртуальная машина Hudson работает: в командной строке требуется примерно столько же времени, что и мой ПК разработки
  • Другие одновременные задачи: я позаботился о том, чтобы не было ничего отвлекающего ресурсов из задачи сборки

Цели Maven буквально чистые и установлены, ничего причудливого и интенсивного ресурса, как Javadoc, Checkstyle и т. Д. Просмотр вывода консоли задачи Hudson Build, кажется, существуют задержки, когда «получение предыдущего номера сборки из [нашего репозитория Arteaffact] Nexus]»,- Но я не знаю простого способа измерения производительности этого шага и публикации артефакта кажется слишком простой операцией, чтобы оправдать общую разницу в скорости.

(Проблема также описана в это нить)

Обновлять:

Мы обновили Hudson/Jenkins до последнего релиза и смогли использовать плагин Timing. Укороченная версия:

  • Хорошая новость: мы теперь знаем Nexus вызывает проблему
  • Плохая новость: мы до сих пор не знаем, почему

Более подробная информация

В одном из наших реальных проектов Maven (Maven Time: 3 мин, Hudson Time: 9 минут) мы могли видеть, что Хадсон также выполняет сборку за 3 минуты, но затем требуется 6 минут, чтобы загрузить артефакт в Nexus.

Выполняя ручную загрузку другого артефакта с использованием веб -интерфейса Nexus, я смог подтвердить следующее:

  • Фактическая загрузка артефактов выполняется за долю времени (т.е. через несколько секунд)
  • Через несколько секунд артефакт появляется как <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 -файла Take <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   

- response /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.5.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 on org.mortbay.jetty.httpconnection@141a720

...

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

OSNPMMMM2GROUP ~-Public retieveItem () :: найден публично:/. Index/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==] -

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   

- держатель сервлета = 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   

- запрос/nexus/service/local/log/config on org.mortbay.jetty.httpconnection@1dbd88f ....

Похоже, он просто сидит там на минуту или около того, чем продолжается с его работой. Любая идея, почему Nexus делает это ценится.

Это было полезно?

Решение

Как обсуждалось в ветке, я подозреваю, что ваш раздвоенный Maven не принимает параметры JVM. Можете ли вы использовать JConsole, чтобы проверить допущенную максимальную кучу - это то, что вы выделили в своем maven_opts?

Имеет ли это какое -либо значение, если вы начнете Хадсон в качестве услуги по сравнению с началом Хадсона из командной строки?

Обновлять:

Развертывание на Nexus требует множества оперативной памяти, гораздо больше, чем компиляция (по моему опыту). Обмен на низкую память может быть тем, что замедляет его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top