如何配置Jetty以便它只能接收前几百个请求并将5xx返回到超时请求。
我执行了https://wiki.eclipse.org/Jetty/Howto/High_Load#Thread_Pool
这是我的码头配置
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<New id="ServerLog" class="java.io.PrintStream">
<Arg>
<New class="org.eclipse.jetty.util.RolloverFileOutputStream">
<Arg><SystemProperty name="jetty.logs" default="./logs"/>/<SystemProperty name="jetty.appkey" default="jetty"/>.log.yyyy_mm_dd</Arg>
<Arg type="boolean">true</Arg>
<Arg type="int">10</Arg>
<Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT+8</Arg></Call></Arg>
<Arg type="string">yyyy-MM-dd</Arg>
<Arg type="string"></Arg>
<Get id="ServerLogName" name="datedFilename"/>
</New>
</Arg>
</New>
<Call class="org.eclipse.jetty.util.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>
<Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>
<Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call>
<Set name="ThreadPool">
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<!-- specify a bounded queue -->
<Arg>
<New class="java.util.concurrent.ArrayBlockingQueue">
<Arg type="int">300</Arg>
</New>
</Arg>
<Set name="minThreads">20</Set>
<Set name="maxThreads">200</Set>
<Set name="detailedDump">false</Set>
</New>
</Set>
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><SystemProperty name="jetty.host"/></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
<Set name="acceptQueueSize">100</Set>
<Set name="maxIdleTime">100</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<!-- Set name="confidentialPort">8063</Set -->
<Set name="lowResourcesConnections">100</Set>
<Set name="lowResourcesMaxIdleTime">100</Set>
</New>
</Arg>
</Call>
然后我接受了压力测试
ab -c 10000 -n 20000 -l
但结果是
Concurrency Level: 10000
Time taken for tests: 98.700 seconds
Complete requests: 20000
Failed requests: 16909
(Connect: 0, Receive: 0, Length: 16909, Exceptions: 0)
Write errors: 0
Non-2xx responses: 1
Total transferred: 301105691 bytes
HTML transferred: 296709079 bytes
Requests per second: 202.63 [#/sec] (mean)
Time per request: 49349.994 [ms] (mean)
Time per request: 4.935 [ms] (mean, across all concurrent requests)
Transfer rate: 2979.22 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 314 301.8 355 1149
Processing: 313 40984 33341.1 36948 98109
Waiting: 0 40112 33522.7 35817 98107
Total: 720 41298 33360.0 37063 98615
Percentage of the requests served within a certain time (ms)
50% 37063
66% 59864
75% 71831
80% 78646
90% 91082
95% 95328
98% 97180
99% 97705
100% 98615 (longest request)
我使用'-l'选项并且仍有很多失败的请求,所以我同时重试我打开另一个标签并卷曲网址,而不是在一段时间后返回503但是正确的响应。
我的配置有什么问题吗?
答案 0 :(得分:0)
Jetty 7 and Jetty 8 are EOL (End of Life)考虑升级。
此外,当您这样做时,您可能希望研究Jetty 9.x LowResourceMonitor(检测连接器级别的行为)或DosFilter(检测特定URL模式级别的行为)的技术)并为您自己检测低资源和/或负载设置自定义解决方案,然后使用503状态代码进行响应。
此外,上限限制ThreadPools永远不是处理负载问题的好主意。它就像试图通过限制高速公路上的匝道数量来控制高速公路上的交通,它只是创造了一个巨大的积压,希望在高速公路上行驶。