Мониторинг сетевой активности на Mac для java.nio.channels.ClosedChannelException
Я использую сервер 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 ответов на вопрос
Похожие вопросы
-
3
Почему Macbook Pro Unibody вылетает в спящем режиме под Windows?
-
2
iTunes на Mac: как использовать внешнюю музыкальную библиотеку на NAS (общий ресурс Windows)?
-
2
Windows 7 Home Premium запоминает пароли общего доступа к сети?
-
-
4
Как я могу конвертировать ISO-образ CD в формат bin / cue на Mac?
-
6
Как вы отключите звук запуска на Mac?
-
5
Почему мой Macbook сильно нагревается при использовании Boot Camp?
-
5
Macbook Pro продолжает извлекать все, что я положил во внутренний оптический привод
-
4
Есть ли альтернативы TextExpander в Mac OS X?
-
6
Способ переноса данных Time Machine на новый диск
-
13
Сброс положения Mac OS X Windows после отсоединения внешнего монитора