On Mon, 2016-12-12 at 21:15 +0000, Idzerda, Edan wrote:
> Hello!  Our reverse proxy uses the Async Client pool to handle connections to 
> backend servers.  We've been tracking a problem for a while where we observe 
> the initial TCP connection is made, but no thread is available to handle the 
> SSL setup before a 10 second timeout expires.  We get into trouble because 
> some of our backend servers are very slow, and some of our clients download 
> very slowly.
> 
> 
> I'm experimenting with a patch to AbstractMultiworkerIOReactor.addChannel() 
> to determine whether the next dispatcher thread is "busy."  My first try was 
> to look at bufferedSessions from the BaseIOReactor, and go through the list 
> of dispatchers one time to see if I can find a free one.
> 
> 
>         int i = Math.abs(this.currentWorker++ % this.workerCount);
> 
>         for (int j = 0; j < this.workerCount; j++) {
> 
>             if (this.dispatchers[i].getSessionCount() == 0) {
> 
>                 break;
> 
>             }
> 
>             i = Math.abs(this.currentWorker++ % this.workerCount);
> 
>         }
> 
>         this.dispatchers[i].addChannel(entry);
> 
> This seems to help us in MOST of the cases we see this issue in production, 
> but there still seem to be a small number of threads which collide.  I'm 
> testing a different version which looks at AbstractIOReactor "sessions" to 
> determine thread busy state, but it never seems to show more than "1" session 
> if I look at the size after piling up slow connections on top of each other.
> 
> I have two questions:
>     Is there a better way to determine whether a thread is busy?
>     Would you be willing to accept a patch to make the dispatchers array in 
> AbstractMultiworkerIOReactor "protected" so I can implement my own 
> ConnectingIOReactor that overrides addChannel() with my own thread selection 
> model?
> 
> Thanks a lot for your help and for providing such a great library to the 
> community!
> 
> - edan
> 

Hi Edan

What I do not quite understand is why i/o dispatch threads get blocked
for 10 seconds or longer. This sounds awfully suspicious.

I could imagine exposing the list of i/o dispatchers to subclasses of
AbstractMultiworkerIOReactor in 4.4.x branch but would rather prefer to
keep it as a last resort.

Oleg


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to