这可能是一个非常奇怪的问题。我正在将Spring Boot 2.0.2与默认的Tomcat容器一起使用。为了在我们的QA环境中建立一个模拟许多服务器的测试,我想建立一个基于Spring Boot的REST服务,该服务同时侦听大量端口。我能够使用另一篇SO帖子(Configure Spring Boot with two ports)中先前描述的技术来做到这一点,该技术基本上是使用TomcatServletWebServerFactory.addAdditionalTomcatConnectors()添加连接器的。
困难在于似乎为每个激活的其他端口创建了大量线程;一些经验指标显示总数为17 +(15 *端口数)。这意味着侦听250个端口会导致创建3767个线程,而侦听500个端口会导致创建7517个线程,我想超出这个数目。用于进行上述测量的测试程序是启动Spring服务的最低限度,并且据我所知,没有代码明确地创建线程,就我所知,所有这些线程都是由Spring / Tomcat创建的。
有没有一种方法可以使用Spring在每个活动端口上不使用太多线程的方法来完成此任务?像Jetty这样的替代容器会更有效吗?
答案 0 :(得分:0)
您可以在spring boot配置文件中配置嵌入式tomcat容器属性,并为这些属性设置适当的数字以限制Tomcat容器创建的线程-
server.tomcat.max-threads=200 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=10 # Minimum amount of worker threads.