Hi Bruce,

Great news! 

Regarding the 40s delay I'm puzzled... Did you monitor the state of sockets?
Are they all closed in a timely manner? 

Did you try using a profiler to detect which part of the code actually
causes the delay?

Best regards,
Jérôme Louvel
--
Restlet ~ Founder and Lead developer ~ http://www.restlet.org
Noelios Technologies ~ Co-founder ~ http://www.noelios.com


-----Message d'origine-----
De : news [mailto:[EMAIL PROTECTED] De la part de Bruce Lee
Envoyé : jeudi 2 octobre 2008 02:42
À : discuss@restlet.tigris.org
Objet : Re: Random Grizzly IOException

Hi Jerome,

Thanks for the speedy fix yet again, all seems well (no more exceptions) 
except that sometimes some request takes a long time to return. I have 
yet to determine the cause though but here's the load test result using 
JMeter.

Label,# Samples,Average,Median,90% Line,Min,Max,Error%,Throughput,KB/sec
Restlet Grizzly Load Test,1000,1115,5,22,4,40004,0.0,3.24859,253.796

Notice the maximum response time is 40000ms (40s) but the 
average/median/90% are less than 25ms. The test is done on the 
previously stated system. Your dedication to this and timely response is 
greatly appreciated.

Regards,

Jerome Louvel wrote:
> Hi Bruce,
> 
> Thanks for the env details. 
> 
> It seems to be due to a null selector passed as a parameter to the
> register() method in ByteUtils. I've added an extra test in ByteUtils. It
> might either fully fix the problem or move it somewhere else.
> 
> Could you test again with a recent snapshot?
> http://www.restlet.org/downloads/snapshot.zip
> 
> Best regards,
> Jérôme Louvel
> --
> Restlet ~ Founder and Lead developer ~ http://www.restlet.org
> Noelios Technologies ~ Co-founder ~ http://www.noelios.com
> 
> 
> -----Message d'origine-----
> De : news [mailto:[EMAIL PROTECTED] De la part de Bruce Lee
> Envoyé : lundi 29 septembre 2008 16:40
> À : discuss@restlet.tigris.org
> Objet : Re: Random Grizzly IOException
> 
> Hi Jerome,
> 
> My environment is as follows:
> OS: Windows XP Pro SP2
> JVM:
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> 
> Regards,
> 
> Jerome Louvel wrote:
>> Hi Bruce,
>>
>> Thanks for the reporting this new issue. I've entered a formal report:
>>
>> "NPE during NIO SelectableChannel.register"
>> http://restlet.tigris.org/issues/show_bug.cgi?id=603
>>
>> As it looks like a JVM bug, it would be very useful if you could indicate
>> your OS, JVM version on the report. 
>>
>> Best regards,
>> Jérôme Louvel
>> --
>> Restlet ~ Founder and Lead developer ~ http://www.restlet.org
>> Noelios Technologies ~ Co-founder ~ http://www.noelios.com
>>
>>
>> -----Message d'origine-----
>> De : news [mailto:[EMAIL PROTECTED] De la part de Bruce Lee
>> Envoyé : vendredi 26 septembre 2008 18:39
>> À : discuss@restlet.tigris.org
>> Objet : Re: Random Grizzly IOException
>>
>> Hi Jerome,
>>
>> I downloaded the Restlet 1.1 RC2 and although it seems to be much better 
>> than before, under running the test with Jmeter, there is still 
>> exceptions being thrown. The exception is as follows:
>> SEVERE: An exception occured writing the response entity
>> java.lang.NullPointerException
>>      at 
>>
>
java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableC
>> hannel.java:180)
>>      at
>> java.nio.channels.SelectableChannel.register(SelectableChannel.java:254)
>>      at 
>>
>
org.restlet.util.ByteUtils$NbChannelOutputStream.doWrite(ByteUtils.java:261)
>>      at 
>>
org.restlet.util.ByteUtils$NbChannelOutputStream.write(ByteUtils.java:294)
>>      at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
>>      at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
>>      at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
>>      at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:116)
>>      at java.io.OutputStreamWriter.write(OutputStreamWriter.java:203)
>>      at java.io.Writer.write(Writer.java:140)
>>      at 
>>
>
org.restlet.resource.StringRepresentation.write(StringRepresentation.java:21
>> 0)
>>      at 
>>
>
org.restlet.resource.StreamRepresentation.write(StreamRepresentation.java:68
>> )
>>      at 
>>
>
com.noelios.restlet.http.HttpServerCall.writeResponseBody(HttpServerCall.jav
>> a:491)
>>      at 
>>
>
com.noelios.restlet.http.HttpServerCall.sendResponse(HttpServerCall.java:429
>> )
>>      at 
>>
>
com.noelios.restlet.http.HttpServerConverter.commit(HttpServerConverter.java
>> :388)
>>      at 
>>
>
com.noelios.restlet.http.HttpServerHelper.handle(HttpServerHelper.java:148)
>>      at 
>>
>
com.noelios.restlet.ext.grizzly.HttpParserFilter.execute(HttpParserFilter.ja
>> va:78)
>>      at 
>>
>
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolCh
>> ain.java:137)
>>      at 
>>
>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
>>      at 
>>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
>>      at 
>>
>
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.jav
>> a:67)
>>      at 
>>
>
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56
>> )
>>      at
>> com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:169)
>> Sep 26, 2008 12:35:53 PM com.noelios.restlet.LogFilter afterHandle
>>
>> Regards,
>>
>> Bruce Lee wrote:
>>> Hi Jerome,
>>>
>>> Thanks a lot for the timely fix! I'll be looking forward to test out the

>>> 1.1RC2.
>>>
>>> Regards,
>>>
>>> Jerome Louvel wrote:
>>>> Hi Bruce,
>>>>
>>>> Thanks a lot for sharing this test class. It helped me to fix the 
>>>> remaining NIO exception that occured when the main selector was 
>>>> exhausted. Now a new temporary selector is properly registered and 
>>>> selected. Your test class works flawlessly!
>>>>
>>>> Please check in the upcoming 1.1 RC2.
>>>>
>>>> Best,
>>>> Jerome
>>>>
>>>>
>>>> Jerome Louvel a écrit :
>>>>> Hi Bruce,
>>>>>
>>>>> I've just fixed the Grizzly/NIO exception that occurred on Linux 
>>>>> "Resource
>>>>> temporarily unavailable). This solves an issue that was reported by 
>>>>> several
>>>>> persons and that we were experiencing as well.
>>>>>
>>>>> I suggest that you try again when 1.1 RC2 is released. Hopefully soon 
>>>>> now.
>>>>>
>>>>> Best regards,
>>>>> Jérôme Louvel
>>>>> -- 
>>>>> Restlet ~ Founder and Lead developer ~ http://www.restlet.org
>>>>> Noelios Technologies ~ Co-founder ~ http://www.noelios.com
>>>>>
>>>>> -----Message d'origine-----
>>>>> De : news [mailto:[EMAIL PROTECTED] De la part de Bruce Lee
>>>>> Envoyé : vendredi 19 septembre 2008 20:43
>>>>> À : discuss@restlet.tigris.org
>>>>> Objet : Re: Random Grizzly IOException
>>>>>
>>>>> Hi Jerome,
>>>>>
>>>>> Sorry to took so long to reply as I got side tracked with other tasks 
>>>>> at hand, but I have tried my test case with the latest Restlet 1.1 
>>>>> RC1 and the same problem still exists. I've attached my test code 
>>>>> with simple http server that simply tries to write 80k chars into the 
>>>>> response. If the client repeatedly request the page, then eventually 
>>>>> bytesWritten on the channel would be 0 (line 248 in ByteUtils.java) 
>>>>> and then it'll wait for 10 seconds with line 249
>>>>> if (SelectorFactory.getSelector().select(10000) == 0) {
>>>>> Finally an exception will be logged. Interesting though, if you 
>>>>> remove the select line and allow it to spin on the channel write, the 
>>>>> correct data still gets written to the response. However, that is far 
>>>>> from the correct way to implement NIO so I've also tried replacing 
>>>>> the select with the following code.
>>>>>
>>>>> Selector writeSelector = SelectorFactory
>>>>>         .getSelector();
>>>>> if (writeSelector == null) {
>>>>>     // Continue using the main one.
>>>>>     continue;
>>>>> }
>>>>>
>>>>> ((SelectableChannel) this.channel).register(
>>>>>         writeSelector, SelectionKey.OP_WRITE);
>>>>>
>>>>> if (writeSelector.select(10000) == 0) {
>>>>>     throw new IOException("Client disconnected");
>>>>> }
>>>>>
>>>>> But another set of exceptions occurs after a few requests:
>>>>>
>>>>> java.io.IOException: An established connection was aborted by the 
>>>>> software in your host machine
>>>>>     at sun.nio.ch.SocketDispatcher.write0(Native Method)
>>>>>     at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)
>>>>>     at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
>>>>>     at sun.nio.ch.IOUtil.write(IOUtil.java:75)
>>>>>     at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334)
>>>>>     at 
>>>>>
>
org.restlet.util.ByteUtils$NbChannelOutputStream.doWrite(ByteUtils.java:243)
>>>>>     at 
>>>>>
>>
org.restlet.util.ByteUtils$NbChannelOutputStream.write(ByteUtils.java:291)
> 
>>>>>     at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
>>>>>     at
sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
>>>>>     at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)
>>>>>     at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
>>>>>     at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
>>>>>     at 
>>>>>
>
org.restlet.resource.StringRepresentation.write(StringRepresentation.java:21
>>>>> 2)
>>>>>     at 
>>>>>
>
org.restlet.resource.StreamRepresentation.write(StreamRepresentation.java:68
>>>>> )
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerCall.writeResponseBody(HttpServerCall.jav
>>>>> a:491)
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerCall.sendResponse(HttpServerCall.java:429
>>>>> )
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerConverter.commit(HttpServerConverter.java
>>>>> :388)
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerHelper.handle(HttpServerHelper.java:148) 
>>>>>     at 
>>>>>
>
com.noelios.restlet.ext.grizzly.HttpParserFilter.execute(HttpParserFilter.ja
>>>>> va:78)
>>>>>     at 
>>>>>
>
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolCh
>>>>> ain.java:137)
>>>>>     at 
>>>>>
>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
>>>>>     at 
>>>>>
>>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
> 
>>>>>     at 
>>>>>
>
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.jav
>>>>> a:67)
>>>>>     at 
>>>>>
>
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56
>>>>> )
>>>>>     at
>>>>> com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:169)
>>>>> Sep 19, 2008 2:29:40 PM com.noelios.restlet.http.HttpServerConverter 
>>>>> commit
>>>>> SEVERE: An exception occured writing the response entity
>>>>> java.io.IOException: Unable to write to the non-blocking channel. An 
>>>>> established connection was aborted by the software in your host
machine
>>>>>     at 
>>>>>
>
org.restlet.util.ByteUtils$NbChannelOutputStream.doWrite(ByteUtils.java:274)
>>>>>     at 
>>>>>
>>
org.restlet.util.ByteUtils$NbChannelOutputStream.write(ByteUtils.java:291)
> 
>>>>>     at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
>>>>>     at
sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
>>>>>     at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)
>>>>>     at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
>>>>>     at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
>>>>>     at 
>>>>>
>
org.restlet.resource.StringRepresentation.write(StringRepresentation.java:21
>>>>> 2)
>>>>>     at 
>>>>>
>
org.restlet.resource.StreamRepresentation.write(StreamRepresentation.java:68
>>>>> )
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerCall.writeResponseBody(HttpServerCall.jav
>>>>> a:491)
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerCall.sendResponse(HttpServerCall.java:429
>>>>> )
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerConverter.commit(HttpServerConverter.java
>>>>> :388)
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerHelper.handle(HttpServerHelper.java:148) 
>>>>>     at 
>>>>>
>
com.noelios.restlet.ext.grizzly.HttpParserFilter.execute(HttpParserFilter.ja
>>>>> va:78)
>>>>>     at 
>>>>>
>
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolCh
>>>>> ain.java:137)
>>>>>     at 
>>>>>
>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
>>>>>     at 
>>>>>
>>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
> 
>>>>>     at 
>>>>>
>
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.jav
>>>>> a:67)
>>>>>     at 
>>>>>
>
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56
>>>>> )
>>>>>     at
>>>>> com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:169)
>>>>> Sep 19, 2008 2:29:40 PM com.noelios.restlet.http.HttpServerConverter 
>>>>> commit
>>>>> WARNING: Unable to send error response
>>>>> java.io.IOException: An established connection was aborted by the 
>>>>> software in your host machine
>>>>>     at sun.nio.ch.SocketDispatcher.write0(Native Method)
>>>>>     at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)
>>>>>     at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
>>>>>     at sun.nio.ch.IOUtil.write(IOUtil.java:75)
>>>>>     at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334)
>>>>>     at
>>>>> com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:105)
>>>>>     at
>>>>> com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:73)
>>>>>     at 
>>>>>
>
com.noelios.restlet.ext.grizzly.GrizzlyServerCall.writeResponseHead(GrizzlyS
>>>>> erverCall.java:269)
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerCall.sendResponse(HttpServerCall.java:416
>>>>> )
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerConverter.commit(HttpServerConverter.java
>>>>> :407)
>>>>>     at 
>>>>>
>
com.noelios.restlet.http.HttpServerHelper.handle(HttpServerHelper.java:148) 
>>>>>     at 
>>>>>
>
com.noelios.restlet.ext.grizzly.HttpParserFilter.execute(HttpParserFilter.ja
>>>>> va:78)
>>>>>     at 
>>>>>
>
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolCh
>>>>> ain.java:137)
>>>>>     at 
>>>>>
>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
>>>>>     at 
>>>>>
>>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
> 
>>>>>     at 
>>>>>
>
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.jav
>>>>> a:67)
>>>>>     at 
>>>>>
>
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56
>>>>> )
>>>>>     at
>>>>> com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:169)
>>>>>
>>>>>
>>>>> Regards
>>>>>
>>>>> Jerome Louvel wrote:
>>>>>  
>>>>>> Hi Bruce,
>>>>>>
>>>>>> There is an existing bug report covering this exception:
>>>>>>
>>>>>> "File transfer exception on Linux"
>>>>>> http://restlet.tigris.org/issues/show_bug.cgi?id=502
>>>>>> It would help if you could attach a simple reproducible test case and
>>>>>>     
>>>>> maybe
>>>>>  
>>>>>> dig into Grizzly extension code if you are more adventurous!
>>>>>>
>>>>>> Best regards,
>>>>>> Jerome
>>>>>>
>>>>>>
>>>>>> -----Message d'origine-----
>>>>>> De : news [mailto:[EMAIL PROTECTED] De la part de Bruce Lee
>>>>>> Envoye : mercredi 2 juillet 2008 22:02
>>>>>> A : discuss@restlet.tigris.org
>>>>>> Objet : Random Grizzly IOException
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm testing out grizzly connector with the 1.1M4 built and I noticed 
>>>>>> that
>>>>>> for
>>>>>> requests takes a bit longer to generate the report, sometimes the
>>>>>>     
>>>>> following
>>>>>  
>>>>>> exceptions occurs:
>>>>>>
>>>>>> Jul 2, 2008 4:01:11 PM com.noelios.restlet.http.HttpServerConverter 
>>>>>> commit
>>>>>> INFO: Exception intercepted
>>>>>> java.io.IOException: Unable to write to the non-blocking channel. 
>>>>>> Unable
>>>>>>     
>>>>> to
>>>>>  
>>>>>> sele
>>>>>> ct the channel to write to it. Selection timed out.
>>>>>>     at
>>>>>>
>>
org.restlet.util.ByteUtils$NbChannelOutputStream.write(ByteUtils.java:219)
> 
>>>>>>     at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
>>>>>>     at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
>>>>>>     at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
>>>>>>     at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:116)
>>>>>>     at java.io.OutputStreamWriter.write(OutputStreamWriter.java:203)
>>>>>>     at java.io.Writer.write(Writer.java:140)
>>>>>>     at
>>>>>>
>>>>>>     
>
org.restlet.resource.StringRepresentation.write(StringRepresentation.java:19
>>>>>  
>>>>>> 9)
>>>>>>     at
>>>>>>
>>>>>>     
>
org.restlet.resource.StreamRepresentation.write(StreamRepresentation.java:59
>>>>>  
>>>>>> )
>>>>>>     at
>>>>>>
>>>>>>     
>
com.noelios.restlet.http.HttpServerCall.writeResponseBody(HttpServerCall.jav
>>>>>  
>>>>>> a:545)
>>>>>>     at
>>>>>>
>>>>>>     
>
com.noelios.restlet.http.HttpServerCall.sendResponse(HttpServerCall.java:484
>>>>>  
>>>>>> )
>>>>>>     at
>>>>>>
>>>>>>     
>
com.noelios.restlet.http.HttpServerConverter.commit(HttpServerConverter.java
>>>>>  
>>>>>> :394)
>>>>>>     at
>>>>>>
>>
com.noelios.restlet.http.HttpServerHelper.handle(HttpServerHelper.java:96)
> 
>>>>>>     at
>>>>>>
>>>>>>     
>
com.noelios.restlet.ext.grizzly.HttpParserFilter.execute(HttpParserFilter.ja
>>>>>  
>>>>>> va:68)
>>>>>>     at
>>>>>>
>>>>>>     
>
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolCh
>>>>>  
>>>>>> ain.java:124)
>>>>>>     at
>>>>>>
>>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
> 
>>>>>>     at
>>>>>>
>>
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:75)
> 
>>>>>>     at
>>>>>>
>>>>>>     
>
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.jav
>>>>>  
>>>>>> a:54)
>>>>>>     at
>>>>>>
>>>>>>     
>
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57
>>>>>  
>>>>>> )
>>>>>>     at
>>>>>> com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:154)
>>>>>>
>>>>>> This happens maybe every few other requests and hence renders the
>>>>>>     
>>>>> extension
>>>>>  
>>>>>> unusable. I'm wondering if this is a known issue with the extension
or
>>>>>>     
>>>>> there
>>>>>  
>>>>>> is
>>>>>> something I need to configure to avoid hitting this error.
>>>>>>
>>>>>> My environment is as follows:
>>>>>> jdk1.6.0_06
>>>>>> restlet 1.1m4
>>>>>> grizzly 1.7.3 (also tried 1.8.0, the same error)
>>>>>> The output is a XML file converted to String object, stored with
>>>>>> StringRepresentation.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>>
>>>>>>     
>>>>>   
>>>> -- 
>>>> Jerome Louvel
>>>> http://www.noelios.com
>>>>
>>
> 
> 

Reply via email to