Время сборки 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, которые я нашел?
- Почему мой Maven такой медленный на Ubuntu?
- http://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/
Трудная часть вашей проблемы в том, что мы не рассматриваем даже отдаленно близкие среды. Мы не знаем
- переменные среды
settings.xml
(а также/etc/.../.settings.xml
)- Программное обеспечение сервера CI выполняет сборку или вы просто используете тот же
mvn clean install
на вашей локальной машине и на пульте? - и т. д.
И я не могу сказать, что этот сайт был бы даже лучшим местом для устранения неполадок. Если вы создаете набор проектов для OSB, вам, возможно, повезет, заполнив SR с поддержкой Oracle и попросив их помочь вам в соответствии с вашим планом поддержки. По крайней мере, в СР в общении немного больше информации. Здесь вы должны предоставить всю возможную информацию, и тогда люди будут шлепать вам ответ. Без каких-либо данных по вашему вопросу нам некуда деться и делать дикие предположения / догадки.