users@grizzly.java.net

Re: exception using ByteBufferManager

From: Jon Brisbin <jon_at_jbrisbin.com>
Date: Tue, 02 Aug 2011 07:18:52 -0500 (CDT)

I looked at the example but it wasn't obvious to me how to change the memory manager or where it should be set.

Could you possibly be more specific?

Thanks!

Jon Brisbin
http//jbrisbin.com

----- Original Message -----

> From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> To: users_at_grizzly.java.net
> Sent: Monday, August 1, 2011 4:40:03 AM
> Subject: Re: exception using ByteBufferManager

> On 07/28/2011 06:32 PM, Jon Brisbin wrote:
> > I think this way is a little faster than what I was doing before.
> > Under load it performs very well and is, more importantly, more
> > consistent in CPU and memory usage than previously.
>

> > Thanks for the help!
>

> > Is this using a DirectByteBuffer underneath? A traceback I once got
> > from AsynchronousFileChannel made think it wasn't...
>

> If you haven't changed the MemoryManager - then it doesn't use direct
> buffers. You can check the sample I referred recently to see how you
> can switch to direct buffers.

> What about

> Exception in thread "Thread-4" java.lang.IllegalArgumentException
> at java.nio.Buffer.position(Buffer.java:236)
> at sun.nio.ch.IOUtil.write(IOUtil.java:63)
> at
> sun.nio.ch.SimpleAsynchronousFileChannelImpl$3.run(SimpleAsynchronousFileChannelImpl.java:375)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> at java.lang.Thread.run(Thread.java:722)

> Is it still the case?

> Thanks.

> WBR,
> Alexey.

> > Thanks!
>

> > Jon Brisbin
>
> > http//jbrisbin.com
>

> > ----- Original Message -----
>

> > > From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> >
>
> > > To: users_at_grizzly.java.net
> >
>
> > > Sent: Thursday, July 28, 2011 10:47:37 AM
> >
>
> > > Subject: Re: exception using ByteBufferManager
> >
>

> > > Hi Jon,
> >
>

> > > with the new code (see Ryan's email),
> >
>
> > > please use inputStream.readBuffer();
> >
>

> > > this way you won't need to call InputStream.skip(...) etc, pls.
> > > see
> > > the sample I sent recently.
> >
>

> > > Thanks.
> >
>

> > > Alexey.
> >
>

> > > On 07/28/2011 05:11 PM, Jon Brisbin wrote:
> >
>
> > > > I tried this in my shootout example and got this:
> > >
> >
>

> > > > java.lang.IllegalStateException: CompositeBuffer has already
> > > > been
> > > > disposed
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.memory.BuffersBuffer.checkDispose(BuffersBuffer.java:1614)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.memory.BuffersBuffer.remaining(BuffersBuffer.java:348)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.http.server.io.InputBuffer.available(InputBuffer.java:357)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.http.server.io.InputBuffer.readyData(InputBuffer.java:349)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.http.server.io.InputBuffer.notifyAvailable(InputBuffer.java:731)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.http.server.io.InputBuffer.notifyAvailable(InputBuffer.java:691)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.http.server.NIOInputStreamImpl.notifyAvailable(NIOInputStreamImpl.java:139)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.http.server.io.NIOInputSource$notifyAvailable.call(Unknown
> > > > Source)
> > >
> >
>

> > > > here's my handler code:
> > >
> >
>

> > > > def readAvailable() {
> > >
> >
>
> > > > def len = inputStream.readyData()
> > >
> >
>
> > > > def inputStreamBuffer = inputStream.getBuffer()
> > >
> >
>
> > > > def writeBuff = inputStreamBuffer.toByteBuffer()
> > >
> >
>
> > > > try {
> > >
> >
>
> > > > channel.write(writeBuff, bytes.get(), writeBuff, handler)
> > >
> >
>
> > > > bytes.addAndGet(len)
> > >
> >
>
> > > > } finally {
> > >
> >
>
> > > > inputStreamBuffer.tryDispose()
> > >
> >
>
> > > > }
> > >
> >
>
> > > > }
> > >
> >
>

> > > > Thanks!
> > >
> >
>

> > > > Jon Brisbin
> > >
> >
>
> > > > http//jbrisbin.com
> > >
> >
>

> > > > ----- Original Message -----
> > >
> >
>

> > > > > From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> > > >
> > >
> >
>
> > > > > To: users_at_grizzly.java.net
> > > >
> > >
> >
>
> > > > > Sent: Thursday, July 28, 2011 6:22:00 AM
> > > >
> > >
> >
>
> > > > > Subject: Re: exception using ByteBufferManager
> > > >
> > >
> >
>

> > > > > Hi Jon,
> > > >
> > >
> >
>

> > > > > I've updated the sample [1], so you can try to uncomment
> > > > > couple
> > > > > of
> > > > > lines to try direct buffers.
> > > >
> > >
> >
>
> > > > > Only one thing - you need to use latest Grizzly trunk to run
> > > > > it.
> > > >
> > >
> >
>

> > > > > Thanks.
> > > >
> > >
> >
>

> > > > > WBR,
> > > >
> > >
> >
>
> > > > > Alexey.
> > > >
> > >
> >
>

> > > > > [1]
> > > > > http://java.net/projects/grizzly/sources/git/content/samples/http-server-samples/src/main/java/org/glassfish/grizzly/samples/httpserver/nonblockinghandler/UploadHttpHandlerSample.java
> > > >
> > >
> >
>

> > > > > On 07/27/2011 10:58 PM, Jon Brisbin wrote:
> > > >
> > >
> >
>
> > > > > > I'm trying to use the ByteBufferManager in my application
> > > > > > because
> > > > > > I'm
> > > > > > hitting some issues with garbage collecting all these byte
> > > > > > arrays
> > > > > > I'm allocating for writing uploads. Whenever I try and
> > > > > > allocate
> > > > > > an
> > > > > > object from it, though, I get this exception:
> > > > >
> > > >
> > >
> >
>

> > > > > > java.lang.ClassCastException: java.nio.DirectByteBuffer
> > > > > > cannot
> > > > > > be
> > > > > > cast to org.glassfish.grizzly.memory.HeapBuffer
> > > > >
> > > >
> > >
> >
>
> > > > > > at
> > > > > > org.glassfish.grizzly.memory.HeapMemoryManager$HeapBufferThreadLocalPool.reset(HeapMemoryManager.java:307)
> > > > >
> > > >
> > >
> >
>
> > > > > > at
> > > > > > org.glassfish.grizzly.memory.ByteBufferManager.reallocatePoolBuffer(ByteBufferManager.java:371)
> > > > >
> > > >
> > >
> >
>
> > > > > > at
> > > > > > org.glassfish.grizzly.memory.ByteBufferManager.allocateByteBuffer(ByteBufferManager.java:238)
> > > > >
> > > >
> > >
> >
>
> > > > > > at
> > > > > > org.glassfish.grizzly.memory.ByteBufferAware$allocateByteBuffer.call(Unknown
> > > > > > Source)
> > > > >
> > > >
> > >
> >
>

> > > > > > Are there example of proper use of this somewhere?
> > > > >
> > > >
> > >
> >
>

> > > > > > Thanks!
> > > > >
> > > >
> > >
> >
>

> > > > > > Jon Brisbin
> > > > >
> > > >
> > >
> >
>
> > > > > > http//jbrisbin.com
> > > > >
> > > >
> > >
> >
>