针对8核心系统的性能调优Tomcat

时间:2018-08-30 10:34:24

标签: performance tomcat

我有一个运行在8核心系统上的tomcat应用程序。我观察到,当将最大线程数从16更改为2时,吞吐率为13 req / sec时,性能有了显着提高

因此,开始打印活动线程数,似乎将tomcat的maxthread设置为2时,活动线程平均为8个,因此基本上8个线程在8个内核上运行,可能会获得最佳结果

但是,当我将吞吐量提高到30-40 req / sec时,我看到了请求排队。因此,这里发生的是由于仅maxthreads 2个请求开始堆积。

然后当我将maxThreads设置为非常高的值(如10k)时,我看到JVM再花很长时间进行上下文切换。

我的问题是,tomcat中是否有任何属性可以指定要在JVM并行处理中处理多少个请求?

acceptCount属性不会帮助它,因为它仅定义了请求上升的阈值。

还有一个称为acceptorThreadCount的属性,它定义为用于接受连接的线程数,这是我需要调整的属性,还是有其他属性,或者我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

根据Connector documentation中的maxThreads(我假设这是您更改maxThreads配置的地方)

  

由此创建的最大请求处理线程数   连接器,因此决定了最大数量   可以同时处理的请求。如果未指定,则此   属性设置为200。如果执行程序与此关联   连接器,此属性将被忽略,因为连接器将执行   使用执行程序而不是内部线程池的任务。注意   如果配置了执行程序,则为此属性设置任何值   会正确记录,但会(例如通过JMX)报告为   -1以表明它未被使用。

将线程数设置为大于可用内核数没有问题(相反),因为不是每个内核都一直在工作(很多时候他们都在等待外部输入,例如来自数据库的数据)。

如果我错过了要点,而您更改了不同的maxThreads配置,请进行说明。另一方面,您的问题与指定并行处理多少个请求的配置有关:如果您引用了不同的maxThreads,则tomcat的默认值为200,可以在连接器的配置中进行更改(或作为文档参考)说,与执行人)