我有一个运行在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的属性,它定义为用于接受连接的线程数,这是我需要调整的属性,还是有其他属性,或者我在这里缺少什么?
答案 0 :(得分:0)
根据Connector documentation中的maxThreads(我假设这是您更改maxThreads配置的地方)
由此创建的最大请求处理线程数 连接器,因此决定了最大数量 可以同时处理的请求。如果未指定,则此 属性设置为200。如果执行程序与此关联 连接器,此属性将被忽略,因为连接器将执行 使用执行程序而不是内部线程池的任务。注意 如果配置了执行程序,则为此属性设置任何值 会正确记录,但会(例如通过JMX)报告为 -1以表明它未被使用。
将线程数设置为大于可用内核数没有问题(相反),因为不是每个内核都一直在工作(很多时候他们都在等待外部输入,例如来自数据库的数据)。
如果我错过了要点,而您更改了不同的maxThreads配置,请进行说明。另一方面,您的问题与指定并行处理多少个请求的配置有关:如果您引用了不同的maxThreads,则tomcat的默认值为200,可以在连接器的配置中进行更改(或作为文档参考)说,与执行人)