воскресенье, 30 сентября 2018 г.

Решил проблему с медленным запуском jenkins slave на Raspberry PI 3

Продолжение истории с jenkins, предыдущие посты тут и тут.

После отката версии jenkins slave с 3.25 до 3.15 решил запостить баг. Нашел уже существующий JENKINS-53810, который похож по описанию на мою проблему. Попробовал предложенное решение, но мне оно не помогло.

Попутно гуглил об использовании jenkins slave на Raspberry PI и наткнулся на эту статью. В ней использовалась java от Oracle, а не OpenJDK, которая доступна в репозитариях Raspbian.

Пробую установить jdk для arm с сайта Oracle. Скачиваю файл jdk-8u181-linux-arm32-vfp-hflt.tar.gz (Linux ARM 32 Hard Float ABI) и заливаю его на raspberry


Теперь распаковываю архив в домашнюю директорию пользователя jenkins

$ cd /home/jenkins
$ tar -xzf /tmp/jdk-8u181-linux-arm32-vfp-hflt.tar.gz
$ ln -s jdk1.8.0_181 jdk
$ /home/jenkins/jdk/bin/java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) Client VM (build 25.181-b13, mixed mode)

Пробую для начала запустить slave из консоли

$ cat | /home/jenkins/jdk/bin/java -jar remoting.jar -workDir /home/jenkins

Прошло не больше 25 секунд, но slave уже отрапортовал о готовности! Стал разбираться в чем же разница между java от Oracle и OpenJDK. Заметил в выводе упоминание mixed или interpreted mode и различные названия java машин (OpenJDK Zero / HotSpot). Дальнейшее изучение вопроса привело к находке еще одного варианта jvm - JamVM, которая активируется ключем "-jamvm".

Пробую запустить jenkins slave через эту машину

$ cat | java -jamvm -jar remoting.jar -workDir /home/jenkins

Запуск занял примерно 2 минуты 30 секунд. Не так быстро как у HotSpot от Oracle, но и намного быстрее чем OpenJDK Zero.

Сравнение вывода версий OpenJDK Zero, JamVM и HotSpot

OpenJDK Zero
 
$ java -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b04)
OpenJDK Zero VM (build 25.40-b08, interpreted mode)

JamVM
 
$ java -jamvm -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b04)
JamVM (build 2.0.0, inline-threaded interpreter with stack-caching)

HotSpot
 
$ /home/jenkins/jdk/bin/java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) Client VM (build 25.181-b13, mixed mode)

Почитать о mixed, compiled, interpreted режимах компилятора jvm и флагах -Xint, -Xcomp, -Xmixed можно тут.

Комментариев нет:

Отправить комментарий