[ 
https://issues.apache.org/jira/browse/AMQ-6396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jason Baik updated AMQ-6396:
----------------------------
    Summary: JVM property 
org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize has no effect 
(post 5.14)  (was: JVM property 
org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize has no impact)

> JVM property 
> org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize has no 
> effect (post 5.14)
> --------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-6396
>                 URL: https://issues.apache.org/jira/browse/AMQ-6396
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: Transport
>    Affects Versions: 5.14.0
>            Reporter: Jason Baik
>            Priority: Minor
>
> http://activemq.apache.org/nio-transport-reference.html makes it sound as if 
> the number of threads in the SelectorManager's ThreadPoolExecutor can be 
> capped with the JVM property: 
> _org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize_.
> {code}
>     protected ExecutorService createDefaultExecutor() {
>         ThreadPoolExecutor rc = new 
> ThreadPoolExecutor(getDefaultCorePoolSize(), getDefaultMaximumPoolSize(), 
> getDefaultKeepAliveTime(), TimeUnit.SECONDS, new 
> LinkedBlockingQueue<Runnable>(),
>             new ThreadFactory() {
>                 private long i = 0;
>                 @Override
>                 public Thread newThread(Runnable runnable) {
>                     Thread t = new Thread(runnable, "ActiveMQ NIO Worker " + 
> (i++));
>                     t.setDaemon(true);
>                     return t;
>                 }
>             }, new ThreadPoolExecutor.CallerRunsPolicy());
>         return rc;
>     }
> {code}
> However, this is not true since an unbounded LinkedBlockingQueue is being 
> used with the the executor. The size of the thread pool will never grow past 
> the core pool size as per ThreadPoolExecutor's Javadoc:
> {quote}
> If there are more than corePoolSize but less than maximumPoolSize threads 
> running, a new thread will be created *only if the queue is full*.
> {quote}
> I think it's better not to include in the maximumPoolSize property in the 
> documentation since it can confuse users into thinking that the pool size 
> should be capped using the maximumPoolSize property, although in reality it's 
> the corePoolSize property that does that.
> Personally this confused me greatly and wasted me a lot of time while 
> stress-testing the MQTT NIO connector for my company. The broker would 
> constantly hit a live lock and spawn only 10 threads for the NIO transport, 
> even if I set the maximumPoolSize to a larger number.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to