[
https://issues.apache.org/jira/browse/DIRMINA-1012?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14572672#comment-14572672
]
Emmanuel Lecharny commented on DIRMINA-1012:
--------------------------------------------
I highly suspect that your backend was doing expensive things in a blocking way
(like reading data from a DB), and with only nbProcessor+1 threads, you were
facing a bottleneck. In this case, yes, an executor is the way to go.
Now, as the SSL handling is pure CPU, unless you can dedicate processors to
handle the SSL part, which is doubtful considering that your Acceptor is
already configured to use all the existing processors, you won't see any gain
in multithreading *before* the SSLFilter. Quite the opposite, in fact : as you
have more threads than the existing processors, you will have a lot of context
switches between threads, which will cost more than having a 1-1 relation
between CPU intensive tasks and the physical processors.
> SSLFilter does not work in combination with ExecutorFilter
> ----------------------------------------------------------
>
> Key: DIRMINA-1012
> URL: https://issues.apache.org/jira/browse/DIRMINA-1012
> Project: MINA
> Issue Type: Bug
> Components: Filter, SSL
> Affects Versions: 2.0.9
> Environment: Windows 7 x32
> Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
> Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
> Reporter: Marat Gainullin
>
> If i include SslFilter after the ExecutorFilter in acceptor filter chain,
> than SslFilter works unstable. It works sometimes and sometimes it doesn't
> work. It is likely because of multithreaded environment.
> If I move it on top of the filter chain, it works fine.
> Here is buggy filter chain:
> {code}
> final IoAcceptor acceptor = new NioSocketAcceptor(executor/*Some
> outer thread pool*/, new NioProcessor(ioProcessorExecutor/*thread pool with
> only one thread (nio events waiter)*/));
> acceptor.getFilterChain().addLast("executor", new
> ExecutorFilter(executor, IoEventType.EXCEPTION_CAUGHT,
> IoEventType.MESSAGE_RECEIVED, IoEventType.MESSAGE_SENT,
> IoEventType.SESSION_CLOSED));
> acceptor.getFilterChain().addLast("encryption", sslFilter);
> acceptor.getFilterChain().addLast("platypusCodec", new
> ProtocolCodecFilter(new ResponseEncoder(), new RequestDecoder()));
> PlatypusRequestsHandler handler = new PlatypusRequestsHandler(this);
> acceptor.setHandler(handler);
> {code}
> I think that SslFilter have to work properly in multithreaded environment,
> but it doesn't.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)