Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-62576

Websockets connection unstable since remoting 4.2.1 (LTS 2.222.4)

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • remoting
    • None

      Hi,

      Since we upgraded to Jenkins Core 2.222.4 (to include the fix JENKINS-61409) and remoting 4.2.1

      We are facing much more stability issue on the websocket connection. It was not the case before with remoting 4.2 (The only issues we faced was the large payload).

      We can observe now, disconnection on the middle of builds

      Connection break after a simple git checkout.

      [Pipeline] { (Git Checkout)
      [Pipeline] dir
      10:08:31  Running in /home/jenkins/agent/workspace/workspace/*****
      [Pipeline] {
      [Pipeline] checkout (hide)
      [Pipeline] }
      [Pipeline] // dir
      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] }
      10:08:45  ********* was marked offline: Connection was broken: java.nio.channels.ClosedChannelException
      10:08:45  	at jenkins.agents.WebSocketAgents$Session.closed(WebSocketAgents.java:141)
      10:08:45  	at jenkins.websocket.WebSocketSession.onWebSocketSomething(WebSocketSession.java:91)
      10:08:45  	at com.sun.proxy.$Proxy91.onWebSocketClose(Unknown Source)
      10:08:45  	at 
      

      On the agent (multiple exception)

      Jun 05, 2020 8:07:10 AM org.jenkinsci.plugins.workflow.log.GCFlushedOutputStream$FlushRef lambda$static$0
      WARNING: null
      hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@6cca5774:*****": channel is already closed
              at hudson.remoting.Channel.send(Channel.java:760)
              at hudson.remoting.ProxyOutputStream.flush(ProxyOutputStream.java:155)
              at hudson.remoting.RemoteOutputStream.flush(RemoteOutputStream.java:112)
              at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
              at org.jenkinsci.plugins.workflow.log.DelayBufferedOutputStream$FlushControlledOutputStream.flush(DelayBufferedOutputStream.java:131)
              at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:141)
              at org.jenkinsci.plugins.workflow.log.GCFlushedOutputStream$FlushRef.lambda$static$0(GCFlushedOutputStream.java:77)
              at jenkins.security.ImpersonatingScheduledExecutorService$1.run(ImpersonatingScheduledExecutorService.java:58)
              at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
              at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
              at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
              at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
              at java.lang.Thread.run(Thread.java:748)
      Caused by: hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@6cca5774:******": channel is already closed
              at hudson.remoting.Engine$1AgentEndpoint.onClose(Engine.java:590)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1251)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:130)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.ProtocolHandler.close(ProtocolHandler.java:469)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusWebSocket.close(TyrusWebSocket.java:260)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.TyrusClientEngine$2$1.close(TyrusClientEngine.java:635)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter.processError(ClientFilter.java:254)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:180)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.TransportFilter$4.failed(TransportFilter.java:314)
              at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.TransportFilter$4.failed(TransportFilter.java:283)
              at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:128)
              at sun.nio.ch.Invoker$2.run(Invoker.java:218)
              at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
              ... 3 more
      
      
      Jun 05, 2020 8:07:28 AM io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter processError
      SEVERE: Connection error has occurred
      java.io.IOException: Connection reset by peer
              at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
              at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
              at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
              at sun.nio.ch.IOUtil.read(IOUtil.java:197)
              at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:388)
              at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191)
              at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213)
              at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293)
              at java.lang.Thread.run(Thread.java:748)
      
      WARNING: LinkageError while performing UserRequest:hudson.FilePath$IsDirectory@4d6ab49
      java.lang.NoClassDefFoundError: hudson/util/io/Archiver
              at java.lang.Class.getDeclaredFields0(Native Method)
              at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
              at java.lang.Class.getDeclaredFields(Class.java:1916)
              at java.io.ObjectStreamClass.getDefaultSerialFields(ObjectStreamClass.java:1851)
              at java.io.ObjectStreamClass.getSerialFields(ObjectStreamClass.java:1773)
              at java.io.ObjectStreamClass.access$800(ObjectStreamClass.java:79)
              at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:508)
              at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:494)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:494)
              at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:391)
              at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:681)
              at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1942)
              at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1808)
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2099)
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
              at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344)
              at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
              at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344)
              at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:465)
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:423)
              at hudson.remoting.UserRequest.deserialize(UserRequest.java:290)
              at hudson.remoting.UserRequest.perform(UserRequest.java:189)
              at hudson.remoting.UserRequest.perform(UserRequest.java:54)
              at hudson.remoting.Request$2.run(Request.java:369)
              at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
              at java.util.concurrent.FutureTask.run(FutureTask.java:266)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
              at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:117)
              at java.lang.Thread.run(Thread.java:748)
      Caused by: java.lang.ClassNotFoundException: hudson.util.io.Archiver
              at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
              at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:173)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              ... 36 more
      

      Both the master and agent are running on JDK8

      Agent (A VM)

      openjdk version "1.8.0_252"
      OpenJDK Runtime Environment (build 1.8.0_252-b09)
      OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
      

      Master (Official docker container)

      openjdk version "1.8.0_242"
      OpenJDK Runtime Environment (build 1.8.0_242-b08)
      OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
      

      If you have any idea about what is causing the issue.

      PS : I didn't had time to test using latest jenkins version and remoting 4.3. I don't know if it will change anything
      PS2: Totally aware that Websocket are still in beta

      Thanks!

          [JENKINS-62576] Websockets connection unstable since remoting 4.2.1 (LTS 2.222.4)

          Valentin Delaye created issue -
          Valentin Delaye made changes -
          Description Original: Hi,

          Since we upgraded to Jenkins Core 2.222.4 (to include the fix JENKINS-61409) and remoting 4.2.1

          We are facing much more stability issue on the websocket connection. It was not the case before with remoting 4.2 (The only issues we faced was the large payload).

          We can observe now, disconnection on the middle of builds

          Connection break after a simple git checkout.

          {code}
          [Pipeline] { (Git Checkout)
          [Pipeline] dir
          10:08:31 Running in /home/jenkins/agent/workspace/workspace/*****
          [Pipeline] {
          [Pipeline] checkout (hide)
          [Pipeline] }
          [Pipeline] // dir
          [Pipeline] }
          [Pipeline] // stage
          [Pipeline] }
          10:08:45 ********* was marked offline: Connection was broken: java.nio.channels.ClosedChannelException
          10:08:45 at jenkins.agents.WebSocketAgents$Session.closed(WebSocketAgents.java:141)
          10:08:45 at jenkins.websocket.WebSocketSession.onWebSocketSomething(WebSocketSession.java:91)
          10:08:45 at com.sun.proxy.$Proxy91.onWebSocketClose(Unknown Source)
          10:08:45 at
          {code}

          On the agent (multiple exception)

          {code}
          Jun 05, 2020 8:07:10 AM org.jenkinsci.plugins.workflow.log.GCFlushedOutputStream$FlushRef lambda$static$0
          WARNING: null
          hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@6cca5774:*****": channel is already closed
                  at hudson.remoting.Channel.send(Channel.java:760)
                  at hudson.remoting.ProxyOutputStream.flush(ProxyOutputStream.java:155)
                  at hudson.remoting.RemoteOutputStream.flush(RemoteOutputStream.java:112)
                  at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
                  at org.jenkinsci.plugins.workflow.log.DelayBufferedOutputStream$FlushControlledOutputStream.flush(DelayBufferedOutputStream.java:131)
                  at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:141)
                  at org.jenkinsci.plugins.workflow.log.GCFlushedOutputStream$FlushRef.lambda$static$0(GCFlushedOutputStream.java:77)
                  at jenkins.security.ImpersonatingScheduledExecutorService$1.run(ImpersonatingScheduledExecutorService.java:58)
                  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                  at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
                  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
                  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                  at java.lang.Thread.run(Thread.java:748)
          Caused by: hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@6cca5774:******": channel is already closed
                  at hudson.remoting.Engine$1AgentEndpoint.onClose(Engine.java:590)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1251)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:130)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.ProtocolHandler.close(ProtocolHandler.java:469)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusWebSocket.close(TyrusWebSocket.java:260)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.TyrusClientEngine$2$1.close(TyrusClientEngine.java:635)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter.processError(ClientFilter.java:254)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:180)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.TransportFilter$4.failed(TransportFilter.java:314)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.TransportFilter$4.failed(TransportFilter.java:283)
                  at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:128)
                  at sun.nio.ch.Invoker$2.run(Invoker.java:218)
                  at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
                  ... 3 more


          Jun 05, 2020 8:07:28 AM io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter processError
          SEVERE: Connection error has occurred
          java.io.IOException: Connection reset by peer
                  at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
                  at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
                  at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
                  at sun.nio.ch.IOUtil.read(IOUtil.java:197)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:388)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213)
                  at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293)
                  at java.lang.Thread.run(Thread.java:748)

          WARNING: LinkageError while performing UserRequest:hudson.FilePath$IsDirectory@4d6ab49
          java.lang.NoClassDefFoundError: hudson/util/io/Archiver
                  at java.lang.Class.getDeclaredFields0(Native Method)
                  at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
                  at java.lang.Class.getDeclaredFields(Class.java:1916)
                  at java.io.ObjectStreamClass.getDefaultSerialFields(ObjectStreamClass.java:1851)
                  at java.io.ObjectStreamClass.getSerialFields(ObjectStreamClass.java:1773)
                  at java.io.ObjectStreamClass.access$800(ObjectStreamClass.java:79)
                  at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:508)
                  at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:494)
                  at java.security.AccessController.doPrivileged(Native Method)
                  at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:494)
                  at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:391)
                  at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:681)
                  at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1942)
                  at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1808)
                  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2099)
                  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
                  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344)
                  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)
                  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)
                  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
                  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344)
                  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)
                  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)
                  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
                  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:465)
                  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:423)
                  at hudson.remoting.UserRequest.deserialize(UserRequest.java:290)
                  at hudson.remoting.UserRequest.perform(UserRequest.java:189)
                  at hudson.remoting.UserRequest.perform(UserRequest.java:54)
                  at hudson.remoting.Request$2.run(Request.java:369)
                  at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                  at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:117)
                  at java.lang.Thread.run(Thread.java:748)
          Caused by: java.lang.ClassNotFoundException: hudson.util.io.Archiver
                  at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
                  at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:173)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
                  ... 36 more
          {code}

          Both the master and agent are running on JDK8

          Agent (A VM)
          {code}
          openjdk version "1.8.0_252"
          OpenJDK Runtime Environment (build 1.8.0_252-b09)
          OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
          {code}

          Master (Official docker container)

          {code}
          openjdk version "1.8.0_242"
          OpenJDK Runtime Environment (build 1.8.0_242-b08)
          OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
          {code}

          If you have any idea about what is causing the issue.

          PS : I didn't had time to test using latest jenkins version and remoting 4.3. I don't know if it
          PS2: Totally aware that Websocket are still in beta

          Thanks!
          New: Hi,

          Since we upgraded to Jenkins Core 2.222.4 (to include the fix JENKINS-61409) and remoting 4.2.1

          We are facing much more stability issue on the websocket connection. It was not the case before with remoting 4.2 (The only issues we faced was the large payload).

          We can observe now, disconnection on the middle of builds

          Connection break after a simple git checkout.

          {code}
          [Pipeline] { (Git Checkout)
          [Pipeline] dir
          10:08:31 Running in /home/jenkins/agent/workspace/workspace/*****
          [Pipeline] {
          [Pipeline] checkout (hide)
          [Pipeline] }
          [Pipeline] // dir
          [Pipeline] }
          [Pipeline] // stage
          [Pipeline] }
          10:08:45 ********* was marked offline: Connection was broken: java.nio.channels.ClosedChannelException
          10:08:45 at jenkins.agents.WebSocketAgents$Session.closed(WebSocketAgents.java:141)
          10:08:45 at jenkins.websocket.WebSocketSession.onWebSocketSomething(WebSocketSession.java:91)
          10:08:45 at com.sun.proxy.$Proxy91.onWebSocketClose(Unknown Source)
          10:08:45 at
          {code}

          On the agent (multiple exception)

          {code}
          Jun 05, 2020 8:07:10 AM org.jenkinsci.plugins.workflow.log.GCFlushedOutputStream$FlushRef lambda$static$0
          WARNING: null
          hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@6cca5774:*****": channel is already closed
                  at hudson.remoting.Channel.send(Channel.java:760)
                  at hudson.remoting.ProxyOutputStream.flush(ProxyOutputStream.java:155)
                  at hudson.remoting.RemoteOutputStream.flush(RemoteOutputStream.java:112)
                  at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
                  at org.jenkinsci.plugins.workflow.log.DelayBufferedOutputStream$FlushControlledOutputStream.flush(DelayBufferedOutputStream.java:131)
                  at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:141)
                  at org.jenkinsci.plugins.workflow.log.GCFlushedOutputStream$FlushRef.lambda$static$0(GCFlushedOutputStream.java:77)
                  at jenkins.security.ImpersonatingScheduledExecutorService$1.run(ImpersonatingScheduledExecutorService.java:58)
                  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                  at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
                  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
                  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                  at java.lang.Thread.run(Thread.java:748)
          Caused by: hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@6cca5774:******": channel is already closed
                  at hudson.remoting.Engine$1AgentEndpoint.onClose(Engine.java:590)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1251)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:130)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.ProtocolHandler.close(ProtocolHandler.java:469)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.core.TyrusWebSocket.close(TyrusWebSocket.java:260)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.TyrusClientEngine$2$1.close(TyrusClientEngine.java:635)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter.processError(ClientFilter.java:254)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:180)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.Filter.onError(Filter.java:183)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.TransportFilter$4.failed(TransportFilter.java:314)
                  at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.TransportFilter$4.failed(TransportFilter.java:283)
                  at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:128)
                  at sun.nio.ch.Invoker$2.run(Invoker.java:218)
                  at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
                  ... 3 more


          Jun 05, 2020 8:07:28 AM io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter processError
          SEVERE: Connection error has occurred
          java.io.IOException: Connection reset by peer
                  at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
                  at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
                  at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
                  at sun.nio.ch.IOUtil.read(IOUtil.java:197)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:388)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213)
                  at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293)
                  at java.lang.Thread.run(Thread.java:748)

          WARNING: LinkageError while performing UserRequest:hudson.FilePath$IsDirectory@4d6ab49
          java.lang.NoClassDefFoundError: hudson/util/io/Archiver
                  at java.lang.Class.getDeclaredFields0(Native Method)
                  at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
                  at java.lang.Class.getDeclaredFields(Class.java:1916)
                  at java.io.ObjectStreamClass.getDefaultSerialFields(ObjectStreamClass.java:1851)
                  at java.io.ObjectStreamClass.getSerialFields(ObjectStreamClass.java:1773)
                  at java.io.ObjectStreamClass.access$800(ObjectStreamClass.java:79)
                  at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:508)
                  at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:494)
                  at java.security.AccessController.doPrivileged(Native Method)
                  at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:494)
                  at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:391)
                  at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:681)
                  at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1942)
                  at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1808)
                  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2099)
                  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
                  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344)
                  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)
                  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)
                  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
                  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344)
                  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)
                  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)
                  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
                  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:465)
                  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:423)
                  at hudson.remoting.UserRequest.deserialize(UserRequest.java:290)
                  at hudson.remoting.UserRequest.perform(UserRequest.java:189)
                  at hudson.remoting.UserRequest.perform(UserRequest.java:54)
                  at hudson.remoting.Request$2.run(Request.java:369)
                  at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                  at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:117)
                  at java.lang.Thread.run(Thread.java:748)
          Caused by: java.lang.ClassNotFoundException: hudson.util.io.Archiver
                  at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
                  at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:173)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
                  ... 36 more
          {code}

          Both the master and agent are running on JDK8

          Agent (A VM)
          {code}
          openjdk version "1.8.0_252"
          OpenJDK Runtime Environment (build 1.8.0_252-b09)
          OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
          {code}

          Master (Official docker container)

          {code}
          openjdk version "1.8.0_242"
          OpenJDK Runtime Environment (build 1.8.0_242-b08)
          OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
          {code}

          If you have any idea about what is causing the issue.

          PS : I didn't had time to test using latest jenkins version and remoting 4.3. I don't know if it will change anything
          PS2: Totally aware that Websocket are still in beta

          Thanks!

          Update : Issue also happening with 2.339 and remoting 4.3.

          Rollbacking to 2.222.3 + remoting 4.2 the issue disappear (same configuration, same job)

          Valentin Delaye added a comment - Update : Issue also happening with 2.339 and remoting 4.3. Rollbacking to 2.222.3 + remoting 4.2 the issue disappear (same configuration, same job)
          Oleg Nenashev made changes -
          Summary Original: Webcockets connection unstable since remoting 4.2.1 (LTS 2.222.4) New: Websockets connection unstable since remoting 4.2.1 (LTS 2.222.4)

          Oleg Nenashev added a comment -

          Oleg Nenashev added a comment - C jglick vlatombe

          Vincent Latombe added a comment - - edited

          Do you have a reverse proxy or load balancer between the agent and the Jenkins instance?

          Does this happen systematically at the same step?

          Vincent Latombe added a comment - - edited Do you have a reverse proxy or load balancer between the agent and the Jenkins instance? Does this happen systematically at the same step?
          Valentin Delaye made changes -
          Attachment New: Screenshot from 2020-06-08 13-08-40.png [ 51432 ]

          vlatombe We have a Azure application gateway (max body size is set to 128KB, the maxium) + and ingress (traefik 1) load balancer. But the same network configuration works with remoting 4.2.

          In case of 4.2.1 or 4.3 is always fail at the same place. I cannot pass the git checkout (native jenkins checkout method)

          Jun 08, 2020 11:07:52 AM io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter processError
          SEVERE: Connection error has occurred
          java.io.IOException: Connection reset by peer
                  at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
                  at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
                  at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
                  at sun.nio.ch.IOUtil.read(IOUtil.java:197)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:388)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191)
                  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213)
                  at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293)
                  at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                  at java.lang.Thread.run(Thread.java:748)
          

          On the master we can see this

          2020-06-08 11:06:21.752+0000 [id=3665]	INFO	hudson.slaves.ChannelPinger$1#onDead: Ping failed. Terminating the channel ws-agent-devops-ubuntu-jenkins-agent-03-vm.
          java.util.concurrent.TimeoutException: Ping started at 1591614141746 hasn't completed by 1591614381746
          	at hudson.remoting.PingThread.ping(PingThread.java:133)
          	at hudson.remoting.PingThread.run(PingThread.java:89)
          
          

          Valentin Delaye added a comment - vlatombe We have a Azure application gateway (max body size is set to 128KB, the maxium) + and ingress (traefik 1) load balancer. But the same network configuration works with remoting 4.2. In case of 4.2.1 or 4.3 is always fail at the same place. I cannot pass the git checkout (native jenkins checkout method) Jun 08, 2020 11:07:52 AM io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.ClientFilter processError SEVERE: Connection error has occurred java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) at sun.nio.ch.IOUtil.read(IOUtil.java:197) at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:388) at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191) at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293) at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang. Thread .run( Thread .java:748) On the master we can see this 2020-06-08 11:06:21.752+0000 [id=3665] INFO hudson.slaves.ChannelPinger$1#onDead: Ping failed. Terminating the channel ws-agent-devops-ubuntu-jenkins-agent-03-vm. java.util.concurrent.TimeoutException: Ping started at 1591614141746 hasn't completed by 1591614381746 at hudson.remoting.PingThread.ping(PingThread.java:133) at hudson.remoting.PingThread.run(PingThread.java:89)

          jonesbusy Does the same git checkout work if you put it at the beginning at the pipeline ? Trying to determine whether this is a timing or a payload issue.

          It would be great to try to reproduce the problem in a different environment (for example, running the checkout in an agent that is connected directly to your master) so that we can determine whether this could be a load balancer problem (or interaction with), or a general problem.

          Vincent Latombe added a comment - jonesbusy Does the same git checkout work if you put it at the beginning at the pipeline ? Trying to determine whether this is a timing or a payload issue. It would be great to try to reproduce the problem in a different environment (for example, running the checkout in an agent that is connected directly to your master) so that we can determine whether this could be a load balancer problem (or interaction with), or a general problem.
          Valentin Delaye made changes -
          Attachment New: Screenshot from 2020-06-08 21-01-11.png [ 51438 ]
          Attachment New: Screenshot from 2020-06-08 20-59-18.png [ 51439 ]

            Unassigned Unassigned
            jonesbusy Valentin Delaye
            Votes:
            3 Vote for this issue
            Watchers:
            14 Start watching this issue

              Created:
              Updated: