This is known and fixed in 5.2.

On Thu, Sep 22, 2011 at 3:36 AM, Jens Breitenstein <mailingl...@j-b-s.de> wrote:
> Hi All!
>
> It seems we encountered a serious concurrency bug in Tapestry 5.1> under
> high load.
> In our special case one thread was blocked and unable to respond and write
> an asset output stream.
> As virtual assets are shared and the same ByteArrayOutputStream is reused
> for the same asset accross multiple threads, the one thread hanging causes
> all other threads which use the same asset to be blocked too. This happens
> because ByteArrayOutputStream.writeTo uses synchronized internally. To our
> personal opinion we should only cache the data but not the
> ByteArrayOutputStream instances.
>
> Any idea how to solve this or am I wrong?
>
> Jens
>
>
>
> Dump of the locking monitor:
> "TP-Processor241" daemon prio=10 tid=0x00002aab15451000 nid=0x7a87 runnable
> [0x000000004fd70000]
>   java.lang.Thread.State: RUNNABLE
>        at java.net.SocketOutputStream.socketWrite0(Native Method)
>        at
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>        at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:532)
>        at org.apache.jk.common.JkInputStream.doWrite(JkInputStream.java:162)
>        at org.apache.coyote.Response.doWrite(Response.java:560)
>        at
> org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
>        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
>        at
> org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
>        at
> org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
>        at
> org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
>        at
> java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:109)
>        - locked<0x00002aaac0ab5e08>  <monitor://%3C0x00002aaac0ab5e08%3E>
>  (a java.io.ByteArrayOutputStream)
>        at
> org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.streamVirtualAsset(VirtualAssetStreamerImpl.java:96)
>        at
> $VirtualAssetStreamer_132873471df.streamVirtualAsset($VirtualAssetStreamer_132873471df.java)
>        at
> org.apache.tapestry5.internal.services.VirtualAssetDispatcher.dispatch(VirtualAssetDispatcher.java:49)
>        at $Dispatcher_132873471e5.dispatch($Dispatcher_132873471e5.java)
>        at $Dispatcher_132873471d7.dispatch($Dispatcher_132873471d7.java)
>        at
> org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:245)
>        at
> ae.sukar.client.http.services.ShopModule$3.service(ShopModule.java:175)
>
> Dump of one of the locked monitors:
> "TP-Processor223" daemon prio=10 tid=0x00002aab157f0000 nid=0x7a11 waiting
> for monitor entry [0x000000004eb5e000]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at java.io.ByteArrayOutputStream.size(ByteArrayOutputStream.java:144)
>        - waiting to lock<0x00002aaac0ab5e08>
>  <monitor://%3C0x00002aaac0ab5e08%3E>  (a java.io.ByteArrayOutputStream)
>        at
> org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.streamVirtualAsset(VirtualAssetStreamerImpl.java:84)
>        at
> $VirtualAssetStreamer_132873471df.streamVirtualAsset($VirtualAssetStreamer_132873471df.java)
>        at
> org.apache.tapestry5.internal.services.VirtualAssetDispatcher.dispatch(VirtualAssetDispatcher.java:49)
>        at $Dispatcher_132873471e5.dispatch($Dispatcher_132873471e5.java)
>        at $Dispatcher_132873471d7.dispatch($Dispatcher_132873471d7.java)
>        at
> org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:245)
>        at
> ae.sukar.client.http.services.ShopModule$3.service(ShopModule.java:175)
>        at
> $RequestHandler_132873471d8.service($RequestHandler_132873471d8.java)
>        at
> nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper$1.doFilter(RequestFilterWrapper.java:60)
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>



-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

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

Reply via email to