Я использую сервер Jenkins (2.138.2) с примерно дюжиной узлов Mac. На каждом из этих узлов работает High Sierra, за исключением одного, на котором работает Mojave.
Моя проблема в том, что очень периодически (иногда один раз в день, иногда один раз в неделю, иногда 3 недели без проблем, иногда 5 в день), один или несколько из этих узлов Mac сбрасывают соединение с сервером Jenkins на несколько минут середина сборки, что приводит к трассировке стека следующим образом:
FATAL: command execution failed
01:24:49 java.nio.channels.ClosedChannelException
01:24:49 at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
01:24:49 at org.jenkinsci.remoting.protocol.impl.NIONetworkLayer.ready(NIONetworkLayer.java:179)
01:24:49 at org.jenkinsci.remoting.protocol.IOHub$OnReady.run(IOHub.java:795)
01:24:49 at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
01:24:49 at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
01:24:49 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
01:24:49 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
01:24:49 at java.lang.Thread.run(Thread.java:748)
01:24:49 Caused: java.io.IOException: Backing channel 'JNLP4-connect connection from X.X.X.X/X.X.X.X:52164' is disconnected.
01:24:49 at hudson.remoting.RemoteInvocationHandler.channelOrFail(RemoteInvocationHandler.java:214)
01:24:49 at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:283)
01:24:49 at com.sun.proxy.$Proxy108.isAlive(Unknown Source)
01:24:49 at hudson.Launcher$RemoteLauncher$ProcImpl.isAlive(Launcher.java:1143)
01:24:49 at hudson.Launcher$RemoteLauncher$ProcImpl.join(Launcher.java:1135)
01:24:49 at hudson.tasks.CommandInterpreter.join(CommandInterpreter.java:155)
01:24:49 at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:109)
01:24:49 at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
01:24:49 at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
01:24:49 at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
01:24:49 at hudson.model.Build$BuildExecution.build(Build.java:206)
01:24:49 at hudson.model.Build$BuildExecution.doRun(Build.java:163)
01:24:49 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
01:24:49 at hudson.model.Run.execute(Run.java:1819)
01:24:49 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
01:24:49 at hudson.model.ResourceController.execute(ResourceController.java:97)
01:24:49 at hudson.model.Executor.run(Executor.java:429)
Это может происходить чаще, но это не проявляется, потому что это не во время сборки, но у меня нет доказательств, подтверждающих это. Это также, кажется, не происходит на узлах Windows или Linux.
Что я пробовал:
- Отключение ARP на узлах Mac, потому что есть сообщения, относящиеся к Mavericks, которые предполагают, что есть ошибка ARP: https://blog.macstadium.com/blog/osx-10-9-mavericks-bugs
- Убедитесь, что все Mac подключены напрямую к сетевому коммутатору (без WiFi)
- Убедитесь, что Mac настроены так, что никогда не засыпают
- Проверены главные журналы Jenkins на наличие других исключений, ничего интересного, связанного с этой проблемой
- Попытался воспроизвести эту проблему, увеличив нагрузку на процессор, без заметного влияния на потерю пакетов.
- Проверено, правильно ли работает LaunchAgent на всех узлах (нет дублирующих сервисов, все сервисы работают одинаково - JNLP Client)
- Я понял, что многие из этих исключений происходили в одно и то же время каждую ночь (01:06 утра), поэтому я проверил системный журнал на одном из компьютеров Mac и обнаружил, что com.apple.mdworker.shared работает каждую ночь в 1:06. Я прочитал в Интернете, что это работает индексатор Spotlight Search и что он может вызывать "крайнюю медлительность" во время работы. Я пока отключил Spotlight Search в одном окне и сообщу результаты, увидев, повторяется ли проблема.
Симптомы:
- Не менее 50% потери пакетов в течение примерно 5 минут за раз
- java.nio.channels.ClosedChannelException и канал поддержки 'JNLP4-соединение с ...Исключения
- Прежде всего, на компьютерах Mac, работающих под управлением High Sierra или Mojave.
Я могу предоставить больше информации по мере необходимости, я приложил все усилия, чтобы изложить проблему и некоторые из вещей, которые я пробовал. Любая помощь приветствуется, надеюсь, кто-то видел это раньше. Я также был бы признателен, если у кого-то есть идеи о том, как более тщательно контролировать этот процесс в автоматическом режиме.
Обновления
Я настроил мониторинг на рассматриваемых узлах через Grafana для отслеживания использования ЦП и памяти, а также отправленных и полученных сетевых байтов. Я также настроил сервер Xymon, чтобы убедиться, что узлы достижимы с помощью ping, и для отправки оповещения, если что-либо будет недоступно в течение ~ 10 минут.
Инцидент повторялся дважды на этой неделе, в частности, на одном Mac (интересно, с Мохаве). Графана не показала ничего ненормального в процессоре, памяти или сетевом вводе-выводе, однако Xymon сообщил, что узел не реагировал на пинг во время инцидента. Таким образом, коробка ничего не делала, но не отвечала на эхо-запрос в течение как минимум 10 минут, что приводило к сбою сборки.