Почему сборка hvson "mvn clean install" занимает в 3-6 раз больше времени, чем в командной строке? - PullRequest
8 голосов
/ 08 декабря 2010

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

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

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

Цели maven буквально чисты и устанавливаются, ничего необычного и ресурсоемкого, как javadoccheckstyle и т. д. Глядя на выходные данные консоли задач сборки hudson, кажется, что при «получении предыдущего номера сборки из [нашего хранилища артефактов Nexus]» возникают задержки, но я не знаю простого способа измерения производительности этого шага и публикацииартефакт кажется слишком простой операцией, чтобы оправдать общую разницу в скорости.

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

Обновление:

Мы обновили Hudson / Jenkins до последней версии и смогли использовать плагин синхронизации.Короткая версия:

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

Подробнее

В одном из наших реальных проектов maven (время сборки maven: 3 минуты, время сборки hudson: 9 минут) мы могли видеть, что hudson также выполняет сборку за 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 и sha1sum75 МБ файла занимает <1 с для запуска ... </p>

Finallу, это не похоже на какое-то время ожидания сети, потому что задержка примерно пропорциональна размеру артефакта.

Любое представление о том, что делает нексус после получения артефакта, ценится.

Обновление 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.2.jar.sha1 на

...

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/jython-2.5.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 на org.mortbay.jetty.HttpConnection@141a720

...

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

osnpmmM2Group ~ - общедоступный retrieveItem () :: НАЙДЕН публично: /. 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   

- держатель сервлета = 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 на org.mortbay.jetty.HttpConnection@1dbd88f....

Кажется, он просто сидит там минуту или около того, а затем продолжает свою работу. Любая идея, почему Nexus делает это, приветствуется.

1 Ответ

2 голосов
/ 16 марта 2011

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

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

Обновление :

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

...