Bug 62523 - Concurrent stress test websocket server by jmeter, occur:java.io.IOException: java.io.IOException: Broken pipe
Summary: Concurrent stress test websocket server by jmeter, occur:java.io.IOException:...
Status: RESOLVED INVALID
Alias: None
Product: Tomcat 9
Classification: Unclassified
Component: WebSocket (show other bugs)
Version: 9.0.10
Hardware: PC All
: P2 normal (vote)
Target Milestone: -----
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-07-05 10:44 UTC by sosojustdo
Modified: 2018-07-12 08:46 UTC (History)
0 users



Attachments
websocket handler process (11.94 KB, text/plain)
2018-07-05 10:44 UTC, sosojustdo
Details
websocket init process (5.11 KB, text/plain)
2018-07-05 10:45 UTC, sosojustdo
Details
websocket config (1.64 KB, text/plain)
2018-07-05 10:46 UTC, sosojustdo
Details
websocket handler interceptor (3.35 KB, text/plain)
2018-07-05 10:46 UTC, sosojustdo
Details

Note You need to log in before you can comment on or make changes to this bug.
Description sosojustdo 2018-07-05 10:44:50 UTC
Created attachment 36008 [details]
websocket handler process

environment:
1:tomcat version:9.0.10
2:spring-websocket:4.0.0-releases
3:jmeter:4.0.0
Comment 1 sosojustdo 2018-07-05 10:45:42 UTC
Created attachment 36009 [details]
websocket init process
Comment 2 sosojustdo 2018-07-05 10:46:07 UTC
Created attachment 36010 [details]
websocket config
Comment 3 sosojustdo 2018-07-05 10:46:34 UTC
Created attachment 36011 [details]
websocket handler interceptor
Comment 4 Mark Thomas 2018-07-05 12:13:24 UTC
No stack trace from the error, no JMeter config and a test case that has a whole bunch of dependencies that have not been provided. This is heading towards being closed as INVALID.
Comment 5 sosojustdo 2018-07-05 12:15:01 UTC
java.io.IOException: java.io.IOException: Broken pipe
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:315)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:223)
	at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:137)
	at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:100)
	at com.cloudyoung.wx.comet.server.SystemWebSocketHandler.sendMessageToUser(SystemWebSocketHandler.java:233)
	at com.cloudyoung.wx.comet.service.impl.WxWebsocketMessageServiceImpl.sendDialogueMessage(WxWebsocketMessageServiceImpl.java:45)
	at com.cloudyoung.wx.comet.server.SystemWebSocketHandler.handleMessage(SystemWebSocketHandler.java:95)
	at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:59)
	at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:55)
	at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:69)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:112)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$000(StandardWebSocketHandlerAdapter.java:42)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:82)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:79)
	at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:395)
	at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:119)
	at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:495)
	at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:294)
	at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
	at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:82)
	at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
	at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
	at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
	at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
Comment 6 sosojustdo 2018-07-05 12:26:45 UTC
(In reply to Mark Thomas from comment #4)
> No stack trace from the error, no JMeter config and a test case that has a
> whole bunch of dependencies that have not been provided. This is heading
> towards being closed as INVALID.


Thanks you Mark Thomas reply!
一:Jmeter Thread Group config info:
1:thread num: 50
2:Ramp-Up Period(in seconds):1
3:loop num:forever
4:Jmeter connection timeout 5000 seconds; response timeout:20000 seconds

二:stack trace info:
20:24:06 [Thread-336] DEBUG org.springframework.web.socket.server.support.DefaultHandshakeHandler - Requested sub-protocol(s): [], WebSocketHandler supported sub-protocol(s): [], configured sub-protocol(s): []
20:24:06 [Thread-304] DEBUG org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator - Transport error for WebSocket session id=d6c4: java.io.IOException: java.io.IOException: Broken pipe
20:24:06 [Thread-336] DEBUG org.springframework.web.socket.server.support.DefaultHandshakeHandler - Selected sub-protocol: 'null'
20:24:06 [Thread-336] DEBUG org.springframework.web.socket.server.support.DefaultHandshakeHandler - Requested extension(s): [], supported extension(s): []
20:24:06 [Thread-304] INFO  com.cloudyoung.wx.comet.server.SystemWebSocketHandler - {"createTime":"2018-07-05 20:24:06","inputParam":"appId:wxdc55ca89d7d4d1b8, module:WX_WEBSOCKET_DIALOGUE_MODULE","level":"Info","message":"handleTransportError_invoke_method","methodName":"handleTransportError()->123: ","platform":"WX","serviceName":"com.cloudyoung.wx.comet.server.SystemWebSocketHandler"}
20:24:06 [Thread-336] DEBUG org.springframework.web.socket.server.support.DefaultHandshakeHandler - Upgrading request, sub-protocol=null, extensions=[]
20:24:06 [Thread-304] DEBUG org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator - Connection closed for WebSocket session id=d6c4, CloseStatus [code=1006, reason=Broken pipe]
java.io.IOException: java.io.IOException: Broken pipe
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:315)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:223)
	at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:137)
	at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:100)
	at com.cloudyoung.wx.comet.server.SystemWebSocketHandler.sendMessageToUser(SystemWebSocketHandler.java:233)
	at com.cloudyoung.wx.comet.service.impl.WxWebsocketMessageServiceImpl.sendDialogueMessage(WxWebsocketMessageServiceImpl.java:45)
	at com.cloudyoung.wx.comet.server.SystemWebSocketHandler.handleMessage(SystemWebSocketHandler.java:95)
	at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:59)
	at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:55)
	at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:69)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:112)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$000(StandardWebSocketHandlerAdapter.java:42)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:82)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:79)
	at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:395)
	at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:119)
	at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:495)
	at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:294)
	at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
	at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:82)
	at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
	at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
	at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
	at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
	at org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1676)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1007)
	at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$4.completed(Nio2Endpoint.java:540)
	at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$4.completed(Nio2Endpoint.java:518)
	at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
	at sun.nio.ch.Invoker$2.run(Invoker.java:218)
	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)
Caused by: java.io.IOException: Broken pipe
	at sun.nio.ch.FileDispatcherImpl.writev0(Native Method)
	at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51)
	at sun.nio.ch.IOUtil.write(IOUtil.java:148)
	at sun.nio.ch.IOUtil.write(IOUtil.java:103)
	at sun.nio.ch.UnixAsynchronousSocketChannelImpl.implWrite(UnixAsynchronousSocketChannelImpl.java:689)
	at sun.nio.ch.AsynchronousSocketChannelImpl.write(AsynchronousSocketChannelImpl.java:382)
	at sun.nio.ch.AsynchronousSocketChannelImpl.write(AsynchronousSocketChannelImpl.java:416)
	at org.apache.tomcat.util.net.Nio2Channel.write(Nio2Channel.java:183)
	at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper.write(Nio2Endpoint.java:1004)
	at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1041)
	at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:91)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:494)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
	... 38 more
Comment 7 Mark Thomas 2018-07-05 21:19:52 UTC
The exception is tellign you that the client dropped the connection. You need to investigate the JMeter end of this test.
Comment 8 sosojustdo 2018-07-08 02:37:38 UTC
(In reply to Mark Thomas from comment #7)
> The exception is tellign you that the client dropped the connection. You
> need to investigate the JMeter end of this test.


I optimized jmeter configure, but problem reproduce; try tomcat7.x tomcat8.x, the same problem; do you have suggestion
Comment 9 Mark Thomas 2018-07-12 08:46:42 UTC
Comment #7 still stands. The issue is at the client / JMeter end.