users@grizzly.java.net

Re: Socket TCP/IP KeepAlive

From: Ray Racine <ray.racine_at_gmail.com>
Date: Tue, 30 Mar 2010 14:29:05 -0400

Will you state that it is ready for production use? I'm in the 10's to
100's or reqs/sec for hours at a time. My payloads PUT/POST/GET are in
1-10K range.

On Tue, Mar 30, 2010 at 1:04 PM, Oleksiy Stashok <Oleksiy.Stashok_at_sun.com>wrote:

> C'mon, I admit we still change some details in 2.0 API, but pls. not perf.
> again :)))
>
> to prove that Grizzly 2.0 is not slow, I've run a small echo test.
> I've compared Grizzly 1.9.19 (svn trunk) and Grizzly 2.0 (svn trunk)
> configured with different strategies. The result shows that Grizzly 2.0
> performing better or equal to 1.9.x. The difference is more significant when
> echoing tiny packets.
> Here are server and client configs:
>
> Server:
> numberOfCpus: 4
> osName: SunOS 5.10 Generic_Patch_118844-30 i86pc i386 i86pc
> numberOfSelectorThreads: 4
> numberOfWorkerThreads: 5
>
> Client:
> numberOfCpus: 2
> numberOfThreads: 32
> osName: Mac OS X
>
> I didn't use powerful machines during the test, but I think it's enough to
> confirm that Grizzly 2.0 with all its API extensions/changes is not slow.
>
> Thanks.
>
> WBR,
> Alexey.
>
> http://tinyurl.com/yemhry7
>
>
>
>
>
>
>
> <http://tinyurl.com/yemhry7>
> On Mar 30, 2010, at 18:48 , Ray Racine wrote:
>
> Thanks. The work around will work nicely. If you could get it into trunk
> 1.9.19 that would be great. I'm holding off on 2.0 until it approaches the
> approx. the same stability and performance as 1.9.x.
>
> Ray
>
> On Tue, Mar 30, 2010 at 12:17 PM, Oleksiy Stashok <Oleksiy.Stashok_at_sun.com
> > wrote:
>
>> Oh, sorry, my fault - for some reason I understood that we're talking
>> about soTimeout.
>>
>> Currently we don't have a good way how to specify socket keepalive
>> timeout, though we can easily add it to 1.9.19 version (trunk).
>> If you use GWS - there is no way to customize socket keepalive timeout at
>> all. In case you use SelectorThread approach - it's possible to gain this.
>>
>> selectorThread = new SelectorThread() {
>> /**
>> * Create {_at_link TCPSelectorHandler}
>> */
>> @Override
>> protected TCPSelectorHandler createSelectorHandler() {
>> return new SelectorThreadHandler(this) {
>> @Override
>> public void configureChannel(SelectableChannel channel) throws
>> IOException{
>> super.configureChannel(channel);
>> channel.setKeepAlive(true);
>> }
>> }
>> }
>> }
>>
>> WBR,
>> Alexey.
>>
>> On Mar 30, 2010, at 17:40 , Ray Racine wrote:
>>
>> Oleksly,
>>
>> Thanks for the fast replies.
>>
>> From SelectorThread.java
>>
>> /**
>> * Sets the number of seconds before a keep-alive connection that has
>> * been idle times out and is closed.
>> *
>> * @param timeout Keep-alive timeout in number of seconds
>> */
>> public void setKeepAliveTimeoutInSeconds(int timeout) {
>> keepAliveStats.setKeepAliveTimeoutInSeconds(timeout);
>> if (keyHandler != null) {
>> keyHandler.setTimeout(timeout == -1
>> ? SelectionKeyAttachment.UNLIMITED_TIMEOUT: timeout *
>> 1000L);
>> }
>> }
>>
>> Between the client and the server is a NATing Load Balancer. This
>> appliance _will_ timeout and sever an idle connection unless some activity
>> is induced, e.g., a zero data packet. See
>> http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html Section 2.4 as
>> the use-case.
>>
>> Say I use the above code and setKeepAliveTimeoutInSeconds(-1) // infinite
>> Will Grizzly send some sort of nuance packet to prevent the NAT/Load
>> Balancer from timing out my idle TCP connection?
>>
>> I know adjustments can be done directly on the NATing appliance but I'd
>> still like to do it at the code level.
>>
>> In other words, does setting the above achieve the same effect as
>> http://java.sun.com/javase/6/docs/api/java/net/Socket.html#setKeepAlive(boolean)
>> ?
>>
>> Sorry for so many questions today :)
>>
>> Thanks,
>>
>> Ray
>>
>> On Tue, Mar 30, 2010 at 11:15 AM, Oleksiy Stashok <
>> Oleksiy.Stashok_at_sun.com> wrote:
>>
>>> Ok, so to set idle timeout please use:
>>> gws.getSelectorThread().setKeepAliveTimeoutInSeconds(timeout);
>>>
>>> if you want to disable timeout - set "-1".
>>>
>>> WBR,
>>> Alexey.
>>>
>>> On Mar 30, 2010, at 16:59 , Ray Racine wrote:
>>>
>>> I'm configuring everything directly at the SelectorThread API using
>>> examples like GrizzlyWebServer.java, GrizzlyEmbeddedHttp.java etc.
>>>
>>> Ray
>>>
>>> On Tue, Mar 30, 2010 at 9:22 AM, Oleksiy Stashok <
>>> Oleksiy.Stashok_at_sun.com> wrote:
>>>
>>>> Hi Ray,
>>>>
>>>> in Grizzly we don't turn on standard socket keepalive mechanism, but use
>>>> our own (via SelectionKeyHandler API).
>>>>
>>>> If you'd share your Grizzly initialization code - I'll help to change
>>>> keep alive settings.
>>>>
>>>> WBR,
>>>> Alexey.
>>>>
>>>>
>>>>
>>>> On Mar 30, 2010, at 14:12 , Ray Racine wrote:
>>>>
>>>> I notice a number of KeepAlive values in Grizzly, however, I've been
>>>>> unable to find where in Grizzly at the socket level where Socket s,
>>>>> s.setKeepAlive (true) is invoked. My use case is to prevent the NAT from
>>>>> timing out an idle TCP/IP connection.
>>>>>
>>>>> In this case I'm seeking to sustain a dedicated connection between
>>>>> client and server with basic HTTP req/resp. I'd like to set the socket TCP
>>>>> keep alive but I don't see where to do it.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Ray
>>>>>
>>>>> --
>>>>> The object of life is not to be on the side of the majority, but to
>>>>> escape finding oneself in the ranks of the insane. - Marcus Aurelius
>>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
>>>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>>>
>>>>
>>>
>>>
>>> --
>>> The object of life is not to be on the side of the majority, but to
>>> escape finding oneself in the ranks of the insane. - Marcus Aurelius
>>>
>>>
>>>
>>
>>
>> --
>> The object of life is not to be on the side of the majority, but to escape
>> finding oneself in the ranks of the insane. - Marcus Aurelius
>>
>>
>>
>
>
> --
> The object of life is not to be on the side of the majority, but to escape
> finding oneself in the ranks of the insane. - Marcus Aurelius
>
>
>


-- 
The object of life is not to be on the side of the majority, but to escape
finding oneself in the ranks of the insane. - Marcus Aurelius