我有一个运行在8核系统上的tomcat应用程序。我观察到,当将maxthread count从16更改为2时,吞吐量为13 req/sec的性能有了显著的提高
因此,开始打印活动线程数,似乎当tomcat的maxthread设置为2时,活动线程的平均值为8,因此基本上有8个线程在8个内核上运行,这可能是最好的结果
但是,当我将吞吐量增加到30-40req/sec时,我看到请求在排队。因此,这里发生的情况是,由于只有maxthreads2请求开始堆积。
然后,当我将maxThreads设置为非常高的值(如10k )时,我看到JVM再次花费了很长时间进行上下文切换。
我的问题是,tomcat中有没有什么属性可以让我指定在JVM中并行处理多少个请求。
acceptCount属性不会有帮助,因为它只定义了请求的阈值。
还有一个名为acceptorThreadCount的属性,它被定义为用于接受连接的线程数,这是我需要调优的属性,还是有其他属性,或者我在这里遗漏了什么?
发布于 2018-08-30 18:46:22
根据maxThreads的Connector documentation (我假设这就是您更改maxThreads配置的地方):
此连接器要创建的请求处理线程的最大数量,因此它决定了可以处理的并发请求的最大数量。如果未指定,则此属性设置为200。如果某个executor与此连接器相关联,则会忽略此属性,因为连接器将使用executor而不是内部线程池来执行任务。请注意,如果配置了executor,则为该属性设置的任何值都将被正确记录,但它将被报告(例如,通过JMX)为-1,以表明它未被使用。
将线程数设置为高于可用核心的数量没有问题(正好相反),因为并非每个核心都在工作(通常它们都在等待外部输入,例如来自数据库的数据)。
如果我没有抓住要点,而您更改了不同的maxThreads配置,请澄清。另一方面,您的问题是关于指定并行处理多少请求的配置:如果您引用了不同的maxThreads,那么tomcat的默认值是200,并且可以在连接器的配置中更改它(或者,正如文档所说,使用Executor)
https://stackoverflow.com/questions/52094890
复制相似问题