-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Rallavagu,

On 3/30/16 11:54 AM, Rallavagu wrote:
> Tomcat 7.0.47, JDK 7
> 
> I have following long running socketwrite thread (more than 10
> sec). Wondering what could cause this so I can further look and
> investigate.
> 
> "http-bio-28080-exec-1497" daemon prio=10 tid=0x00007f812c230800 
> nid=0x72fa runnable [0x00007f80010f9000] java.lang.Thread.State:
> RUNNABLE at java.net.SocketOutputStream.socketWrite0(Native
> Method) at 
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
>
> 
at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
> at 
> org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalO
utputBuffer.java:215)
>
>  at 
> org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
>
> 
at
> org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuff
er.java:119)
>
>  at 
> org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11
Processor.java:805)
>
>  at org.apache.coyote.Response.action(Response.java:174) at 
> org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:3
66)
>
> 
at
> org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:333
)
>
> 
at
> org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStr
eam.java:101)
>
>  at 
> org.springframework.security.web.context.SaveContextOnUpdateOrErrorRes
ponseWrapper$SaveContextServletOutputStream.flush(SaveContextOnUpdateOrE
rrorResponseWrapper.java:354)
>
>  at 
> com.sun.jersey.spi.container.servlet.WebComponent$Writer.flush(WebComp
onent.java:308)
>
>  at 
> com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.
flush(ContainerResponse.java:146)
>
>  at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:297) at
> sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) - locked
> <0x000000075a610750> (a java.io.OutputStreamWriter) at
> java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at
> java.io.BufferedWriter.flush(BufferedWriter.java:254) - locked
> <0x000000075a610750> (a java.io.OutputStreamWriter) at 
> com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.jav
a:191)
>
>  at 
> com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.write
ToAsString(AbstractMessageReaderWriterProvider.java:128)
>
>  at 
> com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(String
Provider.java:88)
>
>  at 
> com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(String
Provider.java:58)
>
>  at 
> com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse
.java:302)
>
>  at 
> com.sun.jersey.server.impl.application.WebApplicationImpl._handleReque
st(WebApplicationImpl.java:1510)
>
>  at 
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleReques
t(WebApplicationImpl.java:1419)
>
>  at 
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleReques
t(WebApplicationImpl.java:1409)
>
>  at 
> com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent
.java:409)
>
>  at 
> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletC
ontainer.java:558)
>
>  at 
> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletC
ontainer.java:733)
>
>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
> 
> 
> This is during slow response times where many threads were opened 
> (Tomcat configured with 500). Also, thread dump shows that 240 of
> tomcat threads are in following state which suggests that they are
> idle.
> 
> "http-bio-28080-exec-1230" daemon prio=10 tid=0x00007f812c361800 
> nid=0x29a0 waiting on condition [0x00007f810a7e6000] 
> java.lang.Thread.State: TIMED_WAITING (parking) at
> sun.misc.Unsafe.park(Native Method) - parking to wait for
> <0x000000071d193f50> (a 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>
> 
at
> java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
>
> 
at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.
awaitNanos(AbstractQueuedSynchronizer.java:2082)
>
>  at 
> java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java
:467)
>
> 
at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86)
> at
> org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) 
> at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.jav
a:1068)
>
>  at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j
ava:1130)
>
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
java:615)
>
>  at java.lang.Thread.run(Thread.java:744)
> 
> Any clues would help. Thanks.

So ~50% of your request-processing threads are active, and at least
one of them is hanging on socket.write().

I would imagine you have a slow or unreliable client (e.g. mobile
phone with a bad connection) or the client has disappeared but the
socket hasn't closed, yet.

You can set a write timeouts on your sockets, but you might end up
with more server-side errors and cranky clients getting connections
dropped.

- -chris
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iEYEARECAAYFAlb8BRkACgkQ9CaO5/Lv0PCu9QCfZejhctedau7gZzPbhOpllIH7
7ooAnjwHoWz3/aLkjKKDSFlUs3n47MMN
=cJ/8
-----END PGP SIGNATURE-----

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

Reply via email to