Назад | Перейти на главную страницу

Веб-сервер Jenkins не отвечает на HTTP-запросы в Ubuntu / Dell PowerEdge R640

У меня есть система («хост»), которая запускает несколько контейнеров с использованием LXC (то есть «гостей»). Я установил Дженкинса внутри гостей, и они появиться работать по назначению, за исключением того, что они не отвечать на запросы. (Я уже выполнил несколько успешных установок Jenkins, включая LXC.) В этом случае наблюдаемая проблема заключается в том, что встроенный веб-сервер Jenkins (Jetty) не отвечает на HTTP-запросы, даже если эти запросы выполняются изнутри очень гостя LXC, в котором он работает, т.е. указывает на localhost.

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

Это то, что вы получаете при попытке связаться с веб-сервером Jenkins из localhost:

root@base:~# curl -vI http://localhost:8080/jenkins/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD /jenkins/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>

При работающей настройке вы должны получить HTTP-403, потому что вы не прошли аутентификацию, и ответ не должен занять больше секунды или двух, но даже через несколько часов ответа нет. Файл журнала Jenkins также не сообщает об ошибках.

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

Есть какие-нибудь указатели на то, что / где искать, чтобы выяснить и исправить эту проблему?


Вот некоторые вещи, на которые я уже обращал внимание:


Некоторые из вопросов, которые я уже рассмотрел, но не были связаны и не помогли:

Я читал гораздо больше; они всего лишь образец.


1 Это единственный способ быть уверенным ... в основном ...

Вот более подробное объяснение той же проблемы. https://issues.jenkins-ci.org/browse/JENKINS-33412

Предыдущие версии Jenkins ограничивают количество потоков, используемых базовым причалом, до 40 (опция handlerCountMax). И по умолчанию причал использует потоки Runtime.getRuntime (). AvailableProcessors () / 2 для селекторов. И если количество ядер процессора достаточно велико (например, 70) или также запущен коннектор ssl на причале, а количество ядер процессора больше 36, тогда потоки исчерпаны и HTTP-запрос просто застрял. Рассмотрите возможность перехода на последнюю версию jenkins и вручную определите количество потоков для причала - проверьте эти параметры причала - qtpMaxThreadsCount, jettyAcceptorsCount, jettySelectorsCount.

TL; DR

Если есть 70 или больше ЦП в системе, на которой размещен Jenkins, тогда Jenkins / Jetty застревает и не работает. Либо убедитесь, что в системе / контейнере, в котором будет работать Jenkins, есть менее 70 Доступных ЦП или обновите установленный Jenkins до версии не ниже 2.138.2, который был выпущен сегодня (2018-10-10).


Резюме

Оказывается, Jenkins 2.138.1 в репозитории Ubuntu 18.04 LTS есть ошибка, из-за которой Jenkins / Jetty не отвечает в системе с 70 или более процессорами. Дженкинс 2.138.2 был выпущен сегодня, 10 октября 2018 г., и включает исправления для нескольких основных проблем, одна из которых вызвала проблему, с которой я столкнулся.

Журнал изменений Вот. Ключевое исправление для меня:

Я могу подтвердить, что это исправление действительно устраняет проблему, и проверил это на моем сервере с 72 процессорами.

Если вы не можете (пока) обновить установку Jenkins, прочтите возможное решение.


Обходной путь (для контейнеров)

Если вы устанавливаете Jenkins внутри LXC, вы можете управлять этим с помощью следующих команд:

  • lxc config set <container> limits.cpu N, где N < 70; и
  • lxc exec <container> -- systemctl restart jenkins.service

Вам также может потребоваться обновить конфигурацию профиля, что вы можете сделать следующим образом:

lxc profile set <container-profile> limits.cpu N

с теми же оговорками, которые уже были показаны выше. Если вы используете виртуальную машину (например, VirtualBox, VMware и т. Д.), Вы все равно сможете установить количество процессоров, доступных для виртуальной машины.

P.S .: Спасибо Павлу за его пост, что привело меня в правильное русло, чтобы поиграть с подсчетом CPU / Core.