Spring Boot 嵌入式 Tomcat 线程池创建开销

Posted

技术标签:

【中文标题】Spring Boot 嵌入式 Tomcat 线程池创建开销【英文标题】:Spring Boot Embedded Tomcat Thread Pool Creation Overhead 【发布时间】:2016-04-12 01:56:25 【问题描述】:

我想知道是否有人知道向 tomcat 线程池添加更多线程的性能开销信息?

我们一直看到我们的应用程序存在问题,并且所有内容都指向 tomcat 向线程池添加更多线程的问题。这是真的吗?向线程池添加更多线程会导致响应时间变慢吗?

我们正在使用 Spring Boot 及其嵌入式 tomcat 运行 Java REST API。如果我们的问题确实是tomcat向池中添加了更多线程造成的,那么有没有办法在Spring中设置一个最小值呢?根据这个线程 MinSpareThreads 不再存在。 https://github.com/spring-projects/spring-boot/issues/3753

如果没有办法通过 Spring Embedded Tomcat 增加最小线程数,那么您还可以使用哪些其他工具用于线程池?

编辑: 我附上了一个线程配置文件。个人资料不是有问题的时间,而是稍后。

【问题讨论】:

你看到TomcatEmbeddedServletContainerFactory的建议了吗? @Marged 我没看到。我知道容器工厂,但据我所知,它只是提供了对使用 application.properties 的更多控制。 这也可能与某些(同步的)缓存机制不再正常工作有关,例如参见this question 和我对processorCache 的回答的评论。尝试分析以查看线程在哪里(以及为什么)等待。 @vanOekel 我已经用线程配置文件更新了这个问题。然而,我不是很精通阅读它们。 由于缺乏答案,我假设没有人测量过向线程池添加更多线程的性能,以及这是否是响应时间缓慢的实际原因。 【参考方案1】:

我们现在可以添加配置的两个边缘:

wilkinsona 于 2016 年 4 月 19 日发表评论 -> ma​​xThreads 一直是可配置的。 minSpareThreads 现在也可以配置(参见 34eb369)

Add configuration option for maxSpareThreads - (Old bug, finally fixed)

【讨论】:

以上是关于Spring Boot 嵌入式 Tomcat 线程池创建开销的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 上更改嵌入式 tomcat 版本

嵌入式 Tomcat 中带有 JSP 标签库的 Spring-Boot

Spring Boot嵌入式Tomcat能否访问定义的spring.tomcat.basedir的webapps文件夹

Spring Boot 嵌入式 Tomcat 性能

为 Spring Boot 嵌入式 tomcat 添加战争

使用 IntelliJ 部署启用嵌入式 tomcat 的 spring-boot 应用程序