users@grizzly.java.net

Re: exception using ByteBufferManager

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

Got it.

Thanks!

Jon Brisbin
http//jbrisbin.com

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

> From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> To: users_at_grizzly.java.net
> Sent: Tuesday, August 2, 2011 7:22:44 AM
> Subject: Re: exception using ByteBufferManager

> uncomment this:

> 078. // final TCPNIOTransport transport =
> server.getListeners().iterator().next().getTransport();
> 079.
> 080. // If we want to try direct byte buffers?
> 081. // final ByteBufferManager mm = new ByteBufferManager(true, 128
> * 1024,
> 082. // ByteBufferManager.DEFAULT_SMALL_BUFFER_SIZE);
> 083. //
> 084. // transport.setMemoryManager(mm);

> WBR,
> Alexey.

> On 08/02/2011 02:18 PM, Jon Brisbin wrote:
> > 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
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>