【问题标题】:Performance tunning tomcat for 8 core system8核系统性能调优tomcat
【发布时间】:2019-02-05 06:32:27
【问题描述】:

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

所以,开始打印活动线程数,似乎当tomcat的maxthread设置为2时,活动线程平均为8,所以基本上8个线程在8核上运行,最好的结果

但是,当我将吞吐量提高到 30-40 个请求/秒时,我看到请求排队。所以,这里发生的事情是由于只有 maxthreads 2 个请求开始堆积。

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

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

acceptCount 属性无济于事,因为它只定义了请求的阈值。

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

【问题讨论】:

标签: performance tomcat


【解决方案1】:

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

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

将线程数设置为高于可用内核数没有问题(恰恰相反),因为并非每个内核都始终在工作(它们通常在等待外部输入,例如来自数据库的数据)。

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

【讨论】:

  • 我指的是tomcat属性
  • 但是当 tomcat 的 maxthreads 属性设置为高时,我可以看到 JVM 需要很长时间。当 maxthreads 为 250 时,我看到 JVM 需要 20 秒来响应 80req/min 的调用
  • 您能详细说明“tomcat 属性”吗?你如何设置这个值?默认是什么? maxThreads 听起来很笼统,请具体说明。
  • 我正在使用 spring boot .. 我在 application.properties 文件 server.tomcat.max-threads= 中设置了以下值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
相关资源
最近更新 更多