Время сборки Oracle Service Bus в maven в 30 раз медленнее, чем в Windows

В настоящее время у меня есть проект OSB с набором из 21 модуля, который занимает около 4 минут для сборки на моем локальном 2-ядерном / 12 ГБ оперативном ноутбуке с операционной системой Windows без использования многопоточности, просто с помощью простой сборки сборки. Это занимает 10-20 секунд на модуль.

При создании точно такого же проекта на моем CI-сервере, работающем в Ubuntu, время сборки ОЗУ с 8 ядрами / 16 ГБ приближается к 110 минутам, используя около 4 минут на модуль.

Некоторые подробности о сборке Linux:

  • Большая часть этих 4 минут на модуль тратится без дела на 0% загрузки ЦП.
  • MAVEN_OPTS "-Xmx512m -Xms512m"
  • То же время сборки на Java 7 и 8
  • При работе с флагом -X большую часть времени он тратит на "- конец конфигурации -"

Я попытался увеличить лимит дескриптора файла, думая, что это проблема. Это не повлияло на время сборки.

2 ответа

Решение

После профилирования maven с VisualVM как в Windows, так и в Linux я обнаружил, что в Linux он тратит много времени на генерацию случайного начального числа.

Так что, перейдя на (чуть менее безопасный) /dev/./urandom Время сборки сократилось с 110 минут до 1 минуты 47 секунд.

Пример того, как сделать это, передав параметр в качестве флага:

-Djava.security.egd=file:/dev/./urandom

Если вы хотите установить это навсегда, это можно сделать в файле jdk1.7.0_75/jre/lib/security/java.security путем изменения:

securerandom.source=file:/dev/urandom в
securerandom.source=file:/dev/./urandom,

Это может привести к некоторым последствиям для безопасности, о которых вам следует сначала изучить, если вам нужно это сделать.

Здесь много переменных. Я не могу дать ответ, но в целом я стараюсь уменьшить проблему как можно меньше. Вы говорите, что около 21 проекта. Это одинаково медленно с 1? Я знаю, что вы сказали, что получаете его с 4min/module, но это не то же самое, что проект с 1 модулем. Огромный объем файловых дескрипторов (ulimit) может быть очень хлопотно, даже если вы просматриваете только один модуль за раз во время сборки.

Во-вторых, убедитесь, что переменные окружения вашего ноутбука аналогичны. Не совсем легко сравнить Windows с Linux, но вы сможете определить, JAVA_OPTS, MAVEN_OPTS, различные -X/-D флаги одинаковы ли -Xms/-Xmx установлены одинаково и т. д.

Кроме того, вы просматривали какие-либо из результатов поиска в Google, которые я нашел?

Трудная часть вашей проблемы в том, что мы не рассматриваем даже отдаленно близкие среды. Мы не знаем

  1. переменные среды
  2. settings.xml (а также /etc/.../.settings.xml)
  3. Программное обеспечение сервера CI выполняет сборку или вы просто используете тот же mvn clean install на вашей локальной машине и на пульте?
  4. и т. д.

И я не могу сказать, что этот сайт был бы даже лучшим местом для устранения неполадок. Если вы создаете набор проектов для OSB, вам, возможно, повезет, заполнив SR с поддержкой Oracle и попросив их помочь вам в соответствии с вашим планом поддержки. По крайней мере, в СР в общении немного больше информации. Здесь вы должны предоставить всю возможную информацию, и тогда люди будут шлепать вам ответ. Без каких-либо данных по вашему вопросу нам некуда деться и делать дикие предположения / догадки.

Другие вопросы по тегам