Дженкинс в контейнере намного медленнее, чем на самом сервере - PullRequest
0 голосов
/ 06 марта 2019

Недавно мы переделали Дженкинса.Мы решили разместить новую версию в док-контейнере на сервере.

Во время миграции я заметил, что jenkins работает НАМНОГО медленнее, когда находится в контейнере, чем когда он запускался на самом сервере.

Это серьезная проблема, которая может испортить нашу миграцию.

Я попытался найти способы выделить больше ресурсов для контейнера без особой помощи.

Как я могу ускорить контейнер jenkins / предоставить ему все необходимые ему ресурсы на сервере (сервер выделен только для jenkins).

Кроме того, как мне разделить эти ресурсы, когда ятакже хотите запустить подчиненные контейнеры?

1 Ответ

2 голосов
/ 06 марта 2019

Операции с дисками

Одна вещь, которая может замедлиться в Docker, - это когда процесс, выполняющийся в контейнере, выполняет много вызовов ввода-вывода в файловой системе контейнера.Файловая система контейнера - это объединенная файловая система , которая не оптимизирована по скорости.

Здесь тома докера полезны.В дополнение к предоставлению местоположения в файловой системе, которое сохраняется после удаления контейнера, производительность диска на томе докера является хорошей.

Образ докера Jenkins определяет местоположение JENKINS_HOME как том докера,так что, пока ваши задания Jenkins выполняют свои операции с дисками в этом месте, у вас все будет в порядке.

Если вы решите, что доступ к диску на этом томе все еще слишком медленный, вы можете настроить место монтирования этого тома наваш хост докера, чтобы он мог быть подключен к быстрому накопителю, такому как SSD.

Другая хитрость заключается в том, чтобы сделать том докера подключенным к RAM с помощью tmpfs .Обратите внимание, что такой том не обеспечивает постоянство и что данные в этом месте будут потеряны при остановке или удалении контейнера.


Исчерпание памяти JVM / сборщик мусора

Как и ДженкинсJava-приложение, возникает другая потенциальная проблема: исчерпание памяти.В случае, если JVM, на которой выполняется процесс Jenkins, слишком ограничен в памяти, сборщик мусора Java будет работать слишком часто.Вы можете убедиться, что когда вы поймете, что ваше Java-приложение использует слишком много ЦП (сборщик мусора использует ЦП).В этом случае выделите больше памяти JVM:

docker run-p 8080:8080 -p 50000:50000 --env JAVA_OPTS="-Xmx2048m -Djava.awt.headless=true" jenkins/jenkins:lts

Сеть

Контейнеры Docker имеют виртуальный сетевой стек и пользовательские настройки сети.Вы также хотите убедиться, что все операции, связанные с сетью, выполняются быстро.

DNS-сервер может быть проблемой, проверьте его, выполнив ping <some domain name> из контейнера Jenkins.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...