activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AMQ-5269) NIO transports using blocking accept calls, very slow shutdown
Date Thu, 10 Jul 2014 19:24:04 GMT

    [ https://issues.apache.org/jira/browse/AMQ-5269?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14057830#comment-14057830
] 

ASF GitHub Bot commented on AMQ-5269:
-------------------------------------

GitHub user dkulp opened a pull request:

    https://github.com/apache/activemq/pull/33

    [AMQ-5269] Update NIO based transports to use a Select mechanism

    Update NIO based transports to use a Select mechanism for the accepts instead of the blocking
select.
    
    Cuts about 10 minutes off the activemq-stomp tests, drops the NIO test execution time
down to equal to the non-NIO based tests.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/dkulp/activemq AMQ-5269

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/activemq/pull/33.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #33
    
----
commit 52ef9745d9bafbeab940ed4937c014be3abc9655
Author: Daniel Kulp <dkulp@apache.org>
Date:   2014-07-10T14:57:44Z

    [AMQ-5269] Update NIO based transports to use a Select mechanism for the accepts instead
of the blocking select.
    Cuts about 10 minutes off the activemq-stomp tests, drops the NIO test execution time
down to equal to the non-NIO based tests.

----


> NIO transports using blocking accept calls, very slow shutdown
> --------------------------------------------------------------
>
>                 Key: AMQ-5269
>                 URL: https://issues.apache.org/jira/browse/AMQ-5269
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 5.10.0
>            Reporter: Daniel Kulp
>            Assignee: Daniel Kulp
>         Attachments: AMQ-5269.patch
>
>
> Currently, all the TCP based transports are using the old blocking style of socket.accept()
to accept connections.   This works "OK" except that for sockets that have a channel associated
with them, the socket.close() doesn't cause it to return immediately.  It still waits for
the SoTimeout which is currently set a 2 seconds.   That can cause 2 second delays for any
shutdown which causes long, unnecessary delays, particularly in the tests.
> One possible "fix" is to drop the socket.setSoTimeout(2000) call to something much smaller.
  However, that would turn the accept thread into a more "busy wait" scenario which is undesirable.
> A better fix is to change the accepts for the sockets that have a ServerSocketChannel
to use the NIO based selectors for the accept operations.   The selector.disable()/selector.close()
allows the socket and everything to close immediately.  The result is that the NIO based tests
now take the same amount of time as the non-NIO based tests (for which socket.close() causes
the accept to return immediately).
> Pull request forthcoming.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message