【发布时间】:2021-11-03 06:59:12
【问题描述】:
我们用 Java 启动 Jetty 服务器,并有一个非常直接的过程:调用 API,启动服务器。启动 Jetty 时不会发生任何魔法,它是一个不应该依赖于任何东西的静态过程。然而,我们遇到了一些初创公司的问题,Jetty 会尝试打开(可能是无穷无尽的)连接器并最大化 ThreadPool 的大小。 OK-Runs 将只有一个服务器连接器,正如我所期望的那样,使用 4 核 CPU 并且没有设置服务器连接器计数。 我们还尝试通过设置服务器连接器的数量(为一个)来解决这个问题,但 Jetty 仍然会增加计数并且无法启动,因为没有足够的可用线程。 更奇怪的是,另一个 API 用户(不同的应用程序)从来没有遇到过这个问题。这一切都在同一台机器、同一操作系统上进行了测试,甚至通常在同一天进行。 我们使用 Jetty 9.4.38。这就是异常所说的:
无法订阅连接器 java.lang.IllegalStateException:配置线程不足:QueuedThreadPool[qtp370296980]@16124894{STARTED,8
【问题讨论】:
-
你是如何启动 Jetty 的?
-
“我们还尝试通过将服务器连接器的数量设置为一个来解决问题”??你能再解释一下吗,你是怎么做到的? (Jetty中没有这样的设置)
-
start() 在 org.eclipse.jetty.server.Server 的实例上调用
-
我对 Jetty 实现的理解是,除非您为服务器明确设置连接器,否则它将处理连接器。这就是我所做的,我创建了一个只有 1 个接受器和选择器的 ServerConnector,并将这个连接器分配给服务器。
-
Jetty 只有 1 个自创建的连接器场景,
new Server(int port)构造函数,Jetty 本身没有其他机制来创建连接器。如果您有 200 个连接器,那么您的代码专门添加了 200 个连接器。