我在项目中使用Jetty-Runner,最近升级到Jetty 9.使用新配置迁移XML后,我注意到启动日志中的以下行:
WARN:oejx.XmlConfiguration:main: Ignored arg: ...
忽略被打印的arg几乎是我的整个XML,即:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Arg name="threadpool">
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Arg name="maxThreads">200</Arg>
<Arg name="minThreads">50</Arg>
<Arg name="idleTimeout">1000</Arg>
<Arg name="queue">
<New class="java.util.concurrent.ArrayBlockingQueue">
<Arg type="int">6000</Arg>
</New>
</Arg>
<Set name="detailedDump">false</Set>
</New>
</Arg>
</Configure>
我已经使用当前的Jetty Javadocs检查了每个arg名称/类型/ setter,但仍然无法理解这个设置有什么问题,需要忽略。
你能帮忙吗?
答案 0 :(得分:2)
Ignored arg:
表示您的<Arg>
未用于<Configure>
(或<New>
)中引用的对象的构造函数。最可能的原因是你试图改变之前已经设定过的东西。
如果您因为想要更改ThreadPool而来到这里,请继续阅读。
如果您只想配置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
更改为其他内容,则会将其视为极端专家级别选项。您必须了解这将对您的服务器产生的影响。
对最小/最大线程进行更改时,请注意以下事项:
一些最小线程示例:
以下示例仅用于说明目的,并不代表Jetty项目中的“推荐”值集。 Jetty建议值是Jetty中已存在的默认值。
在具有1个网络接口的英特尔i7上,提供平均网页,资源(图像,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
(用于控制相反,整体负荷限制。
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
发布验证了以上内容。