users@grizzly.java.net

Re: exception using ByteBufferManager

From: Oleksiy Stashok <oleksiy.stashok_at_oracle.com>
Date: Tue, 02 Aug 2011 14:22:44 +0200

|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
>
>
> ------------------------------------------------------------------------
>
> *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
>
>
> ------------------------------------------------------------------------
>
> *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
>
>
> ------------------------------------------------------------------------
>
> *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
>
>
>
>
>
>
>
>