[devel] Сборочница - правильные настройки.

Igor Vlasenko vlasenko на imath.kiev.ua
Вт Май 29 23:03:25 MSK 2018


Уважаемые коллеги,

чтобы продвинуться с обновлением java
нужна срочная помощь со сборчницей.

Начал обновление gradle. Залил бутстрап,
а полноценный gradle отправить в Сизиф не могу.
На локальной машине gradle собирается. Но там 4 ядра.

На сборчнице же, как предполагаю,
16 или 32 виртуальных ядра и дефолтный
$ ulimit -u
512

Чем это плохо? Непуганные апстримы практикуют индийский код вида
for Runtime.getRuntime().availableProcessors():
    create a thread, а иногда, возможно, и fork().
При этом сама JVM thread - прожорлива, запускает JIT threads
по числу availableProcessors().
При вложении индийского кода друг в друга мы с легкостью получаем
C*N^2 threads. Для N=2 или N=4 это чепуха,
но для N=32 это уже немало. На нашей сборчнице
это упирается в ее ulimit -u=512
и сборка падает с unable to create new native thread (Хотя памяти в
системе хватает).

Конкретно с gradle N^2 threads, рождаются не только из-за
самого gradle, (хотя и внутри его есть много подобного кода,
но есть хотя бы ограничивающие опции)
а еще внутри используемых им библиотек (ivy,...?).
Апстрим это рассматривает как неправильную конфигурацию -
если у вас такая крутая машина с N ядер и N Gb памяти -
просто поднимите лимит до соответствующих 4096/8192.

Я так понимаю, со сборочницей мы уже наступали на эти грабли,
на что намекает текущий хак с NPROC=1, чтобы сборочнице
не плохело от make -j32.

Чем плох наш NPROC=1 костыль, что он не универсальный - заточен под make.

Я бы советовал cpuset(7) -- нарезать ноду на K пользователей,
и дать каждому пользователю N/K ядер. Приложения, и в частности, JVM,
будут тогда думать, что запущены на N/K ядерной машине и проблема исчезнет.
и ulimit -u поднять, конечно, XXI век на дворе, все-таки.
Заодно в перспективе это поможет уплотнить сборочные ноды,
чтобы на одной ноде можно было бы  параллельно пускать больше сборок.

А прямо сейчас прошу хотя бы только ulimit -u поднять,
чтобы gradle мог собраться и на нашей сборочнице.

-- 

I V


Подробная информация о списке рассылки Devel