Marcus Crafter wrote:
> 
> Hi Stefano,
> 
>         Well, I should step forward and take some of the heat here.
> 
> Stefano Mazzocchi wrote:
> > 6) the code contains a number of things that I found.... well.... let's
> > me look for a polite way of saying this.... hmmm, ehmmmm, errrr, .....
> >
> >             if (this.getLogger().isDebugEnabled()) {
> >                 incRequestCount();
> >                 if (this.getLogger().isDebugEnabled()) {
> >                     this.debug(environment, null, null);
> >                 }
> >             }
> 
>         I am partially responsible for this. The code below and part of the
>         above came from a patch which I contributed

ok, thanks for stepping up.

> > 7) still looking into Cocoon.java:748
> >
> >     /**
> >      * Increment active request count for incoming requests, and save
> > this
> >      * result if it's the maximum.
> >      */
> >     private static synchronized void incRequestCount() {
> >         if (++activeRequestCount > maxRequestCount) {
> >             maxRequestCount = activeRequestCount;
> >         }
> >     }
> >
> >     /**
> >      * Decrement active request count.
> >      */
> >     private static synchronized void decRequestCount() {
> >         --activeRequestCount;
> >     }
> >
> > what are these for? are you aware of the fact that adding a synchronized
> > methods to the front door might create a *huge* bottleneck on high
> > load!?!?!
> 
>         Yes, I am aware that this adds an extra overhead - the above methods
>         should only be called if the application is logging debug statements.

ok

>         Ironically, I actually added these methods to our version of Cocoon to
>         monitor what was happening while testing Cocoon under load, and also
>         during a day's work in production.

well, it's the quantum observer problem: looking at a system might
destroy the information that it previously contained. I mean:
introducing a potential bottleneck to test load might give you more
problems that it solved.

>         The idea was simply to log accurately, per request, the total number of
>         requests being served at that time, and the maximum number of
>         requests served for the applications life period.

see below
 
>         Being able to gauge such internal cocoon usage using this code has
>         been invaluable for us, and has also helped us to fix 2 dynamic
>         compilation problems in Cocoon (wrt sitemap & xsp code) and a session
>         management problem wrt our application.

cool, I'm happy it was useful, but I question the general usefulness of
such a thing.
 
>         My apologies if the code is not efficient, and I won't defend it
>         if you think it's wrong. 

Well, the above code is clearly redundant and please let's avoid these
things in the future (not only for you, Marcus, I mean for everybody).

>         I'm quite keen to learn of a better way to
>         ascertain this information and I'm open if you have any suggestions
>         about how to improve it ?

The code seems to be collecting the maximum number of incoming
concurrent requests. It might be useful, I don't know, but for sure it
doesn't require synchronization. I mean: adding and subtracting one to a
counter is an atomic operation (on ints, it's not on longs, but we don't
have that many requests anyway).

The non-atomic operation is the comparison with previous maximum. One
possible simple solution is to have a sampling thread that reads that
value and logs it someplace. It might be useful for profiling
information.

What do you think?

-- 
Stefano Mazzocchi      One must still have chaos in oneself to be
                          able to give birth to a dancing star.
<[EMAIL PROTECTED]>                             Friedrich Nietzsche
--------------------------------------------------------------------



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

Reply via email to