You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Claude Brisson <cl...@renegat.net.INVALID> on 2018/03/22 14:51:13 UTC

Silencing broken pipe I/O exceptions

Hi all.

I have set up a server-side events mechanism using tomcat (and 
https://github.com/byjg/jquery-sse), and everything is working smoothly.

But each time the server tries to send some data on an SSE channel which 
has just been closed on the client side, even though this exception is 
catched and handled in my SSE servlet, I see this exception in the 
webapp log:

java.io.IOException: Broken pipe
     at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_101]
     at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) 
~[?:1.8.0_101]
     at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) 
~[?:1.8.0_101]
     at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[?:1.8.0_101]
     at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) 
~[?:1.8.0_101]
     at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1241) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:670) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:607) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:597) 
~[tomcat-coyote.jar:8.5.9]
     at org.apache.coyote.ajp.AjpProcessor.flush(AjpProcessor.java:1096) 
~[tomcat-coyote.jar:8.5.9]
     at 
org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:279) 
[tomcat-coyote.jar:8.5.9]
     at org.apache.coyote.Response.action(Response.java:168) 
[tomcat-coyote.jar:8.5.9]
     at 
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:317) 
[catalina.jar:8.5.9]
     at 
org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:284) 
[catalina.jar:8.5.9]
     at 
org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118) 
[catalina.jar:8.5.9]
     at 
info.macias.sse.servlet3.ServletEventTarget.send(ServletEventTarget.java:121) 
[jeasse-servlet3-0.11.1.jar:?]
     at 
info.macias.sse.servlet3.ServletEventTarget.send(ServletEventTarget.java:35) 
[jeasse-servlet3-0.11.1.jar:?]
     at 
info.macias.sse.EventBroadcast.broadcast(EventBroadcast.java:165) 
[jeasse-common-0.11.1.jar:?]
     [...]

With a lot of users this can really pollute the logs. Is there any way 
to silence this stacktrace?

I'm using Java 1.8.0_101 on linux 64 bits, and Tomcat 8.5.9.

Thanks,

   Claude



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Silencing broken pipe I/O exceptions

Posted by Mark Thomas <ma...@apache.org>.
On 21/04/18 16:35, Claude Brisson wrote:
> This log emanates from org.apache.coyote.AbstractProcessor.setErrorState().
> 
> It's very verbose using SSE, and probably not very useful in the general
> case, 99% of the time it just means that the connection was closed on
> the client side.
> 
> Is there any serious reason for this error to log something on [info] ?

http://svn.apache.org/repos/asf/tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml

Search for "61886"

Full background:
https://bz.apache.org/bugzilla/show_bug.cgi?id=61886

Mark


> 
>   Claude
> 
> 
> On 22/03/2018 15:51, Claude Brisson wrote:
>> Hi all.
>>
>> I have set up a server-side events mechanism using tomcat (and
>> https://github.com/byjg/jquery-sse), and everything is working smoothly.
>>
>> But each time the server tries to send some data on an SSE channel
>> which has just been closed on the client side, even though this
>> exception is catched and handled in my SSE servlet, I see this
>> exception in the webapp log:
>>
>> java.io.IOException: Broken pipe
>>     at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_101]
>>     at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
>> ~[?:1.8.0_101]
>>     at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
>> ~[?:1.8.0_101]
>>     at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[?:1.8.0_101]
>>     at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
>> ~[?:1.8.0_101]
>>     at
>> org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1241)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:670)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:607)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:597)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.coyote.ajp.AjpProcessor.flush(AjpProcessor.java:1096)
>> ~[tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:279)
>> [tomcat-coyote.jar:8.5.9]
>>     at org.apache.coyote.Response.action(Response.java:168)
>> [tomcat-coyote.jar:8.5.9]
>>     at
>> org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:317)
>> [catalina.jar:8.5.9]
>>     at
>> org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:284) [catalina.jar:8.5.9]
>>
>>     at
>> org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118)
>> [catalina.jar:8.5.9]
>>     at
>> info.macias.sse.servlet3.ServletEventTarget.send(ServletEventTarget.java:121)
>> [jeasse-servlet3-0.11.1.jar:?]
>>     at
>> info.macias.sse.servlet3.ServletEventTarget.send(ServletEventTarget.java:35)
>> [jeasse-servlet3-0.11.1.jar:?]
>>     at
>> info.macias.sse.EventBroadcast.broadcast(EventBroadcast.java:165)
>> [jeasse-common-0.11.1.jar:?]
>>     [...]
>>
>> With a lot of users this can really pollute the logs. Is there any way
>> to silence this stacktrace?
>>
>> I'm using Java 1.8.0_101 on linux 64 bits, and Tomcat 8.5.9.
>>
>> Thanks,
>>
>>   Claude
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Silencing broken pipe I/O exceptions

Posted by Claude Brisson <cl...@renegat.net.INVALID>.
This log emanates from org.apache.coyote.AbstractProcessor.setErrorState().

It's very verbose using SSE, and probably not very useful in the general 
case, 99% of the time it just means that the connection was closed on 
the client side.

Is there any serious reason for this error to log something on [info] ?

   Claude


On 22/03/2018 15:51, Claude Brisson wrote:
> Hi all.
>
> I have set up a server-side events mechanism using tomcat (and 
> https://github.com/byjg/jquery-sse), and everything is working smoothly.
>
> But each time the server tries to send some data on an SSE channel 
> which has just been closed on the client side, even though this 
> exception is catched and handled in my SSE servlet, I see this 
> exception in the webapp log:
>
> java.io.IOException: Broken pipe
>     at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_101]
>     at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) 
> ~[?:1.8.0_101]
>     at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) 
> ~[?:1.8.0_101]
>     at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[?:1.8.0_101]
>     at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) 
> ~[?:1.8.0_101]
>     at 
> org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1241) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:670) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:607) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:597) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.coyote.ajp.AjpProcessor.flush(AjpProcessor.java:1096) 
> ~[tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:279) 
> [tomcat-coyote.jar:8.5.9]
>     at org.apache.coyote.Response.action(Response.java:168) 
> [tomcat-coyote.jar:8.5.9]
>     at 
> org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:317) 
> [catalina.jar:8.5.9]
>     at 
> org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:284) 
> [catalina.jar:8.5.9]
>     at 
> org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118) 
> [catalina.jar:8.5.9]
>     at 
> info.macias.sse.servlet3.ServletEventTarget.send(ServletEventTarget.java:121) 
> [jeasse-servlet3-0.11.1.jar:?]
>     at 
> info.macias.sse.servlet3.ServletEventTarget.send(ServletEventTarget.java:35) 
> [jeasse-servlet3-0.11.1.jar:?]
>     at 
> info.macias.sse.EventBroadcast.broadcast(EventBroadcast.java:165) 
> [jeasse-common-0.11.1.jar:?]
>     [...]
>
> With a lot of users this can really pollute the logs. Is there any way 
> to silence this stacktrace?
>
> I'm using Java 1.8.0_101 on linux 64 bits, and Tomcat 8.5.9.
>
> Thanks,
>
>   Claude
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org