更新:2018 年 2 月
Ignored arg: 表示您有一个<Arg> 未被用于<Configure>(或<New>)中引用的对象的构造函数。最可能的原因是您试图更改之前已经设置的内容。
如果您在这里是因为您想更改线程池,请继续阅读。
如果您只想配置QueuedThreadPool,您可以选择。
推荐选择:使用jetty-home 或jetty-distribution 启动Jetty?
在${jetty.base} 目录中配置线程属性值。
您可以在 ${jetty.base}/start.ini 或 ${jetty.base}/start.d/*.ini 文件中找到它们。
不使用jetty-home 或jetty-distribution,但仍在使用XML? 为什么?(真的,我们很想知道!)
XML <Get> 方法更适合在现有线程池上设置值。
示例(from Jetty 9.2.20,相同的as Jetty 9.4.8):
<Configure id="Server" class="org.eclipse.jetty.server.Server">
...
<Get name="ThreadPool">
<Set name="minThreads" type="int">10</Set>
<Set name="maxThreads" type="int">200</Set>
<Set name="idleTimeout" type="int">60000</Set>
<Set name="detailedDump">false</Set>
</Get>
如果您想从QueuedThreadPool 更改为其他内容,这被视为极端专家 级别的选项。您必须意识到这将对您的服务器产生的影响。
在更改最小/最大线程时,请注意以下几点:
- 您拥有的 CPU 内核数。 (这会影响所需的最低线程数)
- 您拥有的网络接口数。 (这会影响所需的最低线程数)
- 您将拥有的同时连接数。 (这会影响所需的最低线程数)
- 您将同时拥有的请求数。 (这会影响所需的最低线程数)
- 使用 HTTP/2 将显着增加您的线程需求。
- 使用老式 Servlet 阻塞 API 会增加您的线程需求。 (考虑使用较新的 AsyncContext 和 Async I/O 行为,它会显着降低您的线程需求)
一些最小线程示例:
以下示例仅用于说明目的,并不代表来自 Jetty 项目的“推荐”值集。
Jetty 推荐值是 Jetty 中已经存在的默认值。
在 Intel i7 上,具有 1 个网络接口,服务于普通网页,具有资源(图像、css、javascript 等)。您将需要(8 个用于 cpu 内核,1 个用于网络接口,1 个用于接受器,1 个用于选择器,以及大约 10 个用于将网页及其资源提供给典型的现代 Chrome 浏览器)大约 22 个最少线程。
在具有 1 个网络接口的 Raspberry Pi 上,按顺序(从不并行)向单个 REST 客户端提供 REST 请求,您至少需要 8 个线程。
更多说明:
另外,不要假设 1 个线程 == 1 个请求/响应交换。在 Jetty 上并非如此。 [1...n] 个线程可以在其生命周期内处理单个请求/响应交换。只有使用旧式 Servlet API 阻塞读/写才会持有一个线程(同样,使用新的 Servlet API 异步 I/O 操作)
如果您想在 Jetty 上减少流量/请求的某些假设下调整线程配置,请考虑使用QoSFilter(用于控制端点/资源特定行为)或DoSFilter(用于控制总体负载限制)而是。
旧答案(自 2013 年 12 月起)
1) 修复您的 DTD
你的:
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure.dtd">
Jetty 9+ 的正确方法
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd">
2) 更好地使用type属性
旧版本的 Jetty 不支持 type="int",因为 "int" 不是有效的对象类型。请改用java.lang.Integer(或升级到支持"int" 的较新版本的Jetty)
试试这个吧。
<Arg name="threadpool">
<New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Arg type="java.lang.Integer" name="maxThreads">200</Arg>
<Arg type="java.lang.Integer" name="minThreads">50</Arg>
<Arg type="java.lang.Integer" name="idleTimeout">1000</Arg>
<Arg name="queue">
<New class="java.util.concurrent.ArrayBlockingQueue">
<Arg type="java.lang.Integer">6000</Arg>
</New>
</Arg>
<Set name="detailedDump">false</Set>
</New>
</Arg>
以上内容已通过jetty-9.1.0.v20131115 分发验证。