I'm trying to configure jetty (v 8.1.9) to reject requests if there are already 
XXX requests being processed. Basically I just want it to tell me that it is 
full, rather than eating forever and blowing up :). As I've learned, the 
default behavior is to accept an unlimited number of connections.

I've followed the instructions at 
http://wiki.eclipse.org/Jetty/Howto/High_Load#Thread_Pool to specify a limit on 
the size of the queue used by QueuedTheadPool. Here's an example of something 
I've tried:
    <Set name="ThreadPool">
      <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
        <Arg>
          <New class="java.util.concurrent.ArrayBlockingQueue">
            <Arg type="int">25</Arg>
          </New>
        </Arg>
        <Set name="minThreads">10</Set>
        <Set name="maxThreads">20</Set>
        <Set name="detailedDump">false</Set>
      </New>
    </Set>

This is not limiting the number of connections. I've got a servlet that takes 
about 10s to process a request, and I'm sending 1000 requests at it. With the 
configuration above, I'd expect that ~20 requests would hit the servlet 
immediately, 25 would sit in the queue, and ~955 would be rejected. No requests 
are being rejected. After the first 20 finish, another 20 go, then another 20, 
until all 1000 finish.

While they are processing, I get hundreds of thousands of 
"WARN:oeji.nio:oejin.SelectChannelEndPoint#dispatch(SelectChannelEndPoint.java:225):Dispatched
 Failed!" and 
"DBUG:oejut.QueuedThreadPool:oejut.QueuedThreadPool#dispatch(QueuedThreadPool.java:371):Dispatched
 org.eclipse.jetty.io.nio.SelectChannelEndPoint[...] to stopped qtp[...]" 
messages in the log.

I've confirmed with jmap that the queue indeed is being bounded to 25. Tracing 
through jetty's code, it seems that QueuedThreadPool offers the job to its 
queue, the queue rejects it, and dispatch() returns false to the caller. But 
somewhere up the chain (maybe in SelectorManager?), it just keeps calling 
dispatch() in a tight loop, rather than taking the false return value to mean 
"please stop, I can't eat anymore".

So, what am I doing wrong? Is configuring the thread pool not the way to do 
this?

-Michael
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to