Мониторинг сетевой активности на Mac для java.nio.channels.ClosedChannelException

673
user3270760

Я использую сервер 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 в одном окне и сообщу о результатах после проверки повторения проблемы.

Симптомы:

  • Не менее 50% потери пакетов в течение примерно 5 минут за раз
  • java.nio.channels.ClosedChannelException и канал поддержки 'JNLP4-соединение из ...' Исключения
  • В первую очередь, на компьютерах Mac работают High Sierra или Mojave

Я могу предоставить больше информации по мере необходимости, я приложил все усилия, чтобы изложить проблему и некоторые из вещей, которые я пробовал. Любая помощь приветствуется, надеюсь, кто-то видел это раньше. Я также был бы признателен, если у кого-то есть идеи о том, как более тщательно контролировать этот процесс в автоматическом режиме.

Обновления

Я настроил мониторинг на рассматриваемых узлах через Grafana для отслеживания использования процессора и памяти, а также сетевых байтов, отправленных и полученных. Я также настроил сервер Xymon, чтобы убедиться, что узлы достижимы с помощью ping, и для отправки оповещения, если что-либо будет недоступно в течение ~ 10 минут.

Инцидент повторялся дважды на этой неделе, в частности, на одном Mac (интересно, с Мохаве). Графана не показала ничего ненормального в ЦП, памяти или сетевом вводе-выводе, однако Xymon сообщил, что узел не реагировал на пинг во время инцидента. Таким образом, коробка ничего не делала, но не отвечала на эхо-запрос в течение как минимум 10 минут, что приводило к сбою сборки.

0

0 ответов на вопрос

Похожие вопросы