我正在使用spring + jetty。我正在配置码头:
@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
final JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory(port);
factory.addServerCustomizers((Server server) -> {
final QueuedThreadPool threadPool = server.getBean(QueuedThreadPool.class);
threadPool.setMinThreads(minThreads);
threadPool.setMaxThreads(maxThreads);
threadPool.setIdleTimeout(1000);
});
return factory;
}
它有效但很奇怪。
那么,我的5个帖子在哪里?
答案 0 :(得分:4)
您没有考虑每个连接器如何将选择器和接收器分配到同一个线程池中。
你也没有考虑到线程池中的系统/硬件效果(你有多少cpu核心?是的,这很重要)。
您还定义了一个非常小的线程池。您是否计划连续提供1个http连接?在1个连接器上,使用HTTP / 1.0,保持活动,没有压缩,具有永不失败或超时的完美网络条件?
您是否100%确定您的用户代理(客户)将遵循这些规则?
提示:您正在使用现代Web浏览器在stackoverflow上查看的网页将使用来自线程池的9到18个活动线程,将线程池最大增加到大约35,并且会有他们都在399ms完成了。
请考虑以下任何未来决策都会增加您的线程池压力。
您的设置应该抛出IllegalStateException,表明您的配置非常低。
java.lang.IllegalStateException: Insufficient threads: max=8 < needed(acceptors=1 + selectors=8 + request=1)
由于您说您使用的是Spring,请考虑在
上关注此问题https://github.com/spring-projects/spring-boot/issues/8917
这是一些关于调整最大线程的一般(大手挥舞)建议......
我们知道使用Jetty的最小网站使用19MB内存,并且在其线程池中配置了8个最大线程。 (它是挪威偏远地区的气象站)
我们知道使用Jetty的最大单机网站在30核计算机上使用189GB内存,最多配置30,000个线程,每个网络接口启用8个网络接口,HTTP / 1.x和HTTP / 2 SSL + Gzip + WebSockets,在任何一个时刻平均有280,000个活动连接(在每天的某些时间,每天只有800,000个活动连接达到峰值)