2010/11/17 Mark Thomas <[email protected]>:
> On 17/11/2010 13:05, [email protected] wrote:
>> Author: markt
>> Date: Wed Nov 17 13:05:20 2010
>> New Revision: 1036021
>>
>> URL: http://svn.apache.org/viewvc?rev=1036021&view=rev
>> Log:
>> Increase length of tests to
>> a) reduce impact of start-up overhead
>> b) make it easier to profile
>
> Looks like the next bottleneck is in StandardSession.expire(boolean) due
> to this code:
>
> /*
> * Compute how long this session has been alive, and update
> * session manager's related properties accordingly
> */
> long timeNow = System.currentTimeMillis();
> int timeAlive = (int) ((timeNow - creationTime)/1000);
> synchronized (manager) {
>    if (timeAlive > manager.getSessionMaxAliveTime()) {
>        manager.setSessionMaxAliveTime(timeAlive);
>    }
>    long numExpired = manager.getExpiredSessions();
>    numExpired++;
>    manager.setExpiredSessions(numExpired);
>    int average = manager.getSessionAverageAliveTime();
>    average = (int) (((average * (numExpired-1)) +
>              timeAlive)/numExpired);
>    manager.setSessionAverageAliveTime(average);
> }
>
> Having an exact value for that metric (that I doubt most users even know
> about let alone use) is very expensive. I'm going to look at creation on
> OSX for a little while but I plan to come back to this afterwards. I am
> thinking something along the lines of queues for the last 100 or so
> values of the following:
> - session creation time
> - session expiration time
> - session alive time
> from which metrics such as:
> - 'current' average alive time
> - 'current' session creation rate
> - 'current' session expiration rate
> can be calculated when required. The calculation will probably be
> expensive but better than than expensive operations on every session
> expiration.
>

My impression looking on the above cited code of StandardSession is
that all that arithmetics should be done inside the manager.

Then the manager can be optimized how to store it.

E.g., unless someone calls getSessionAverageAliveTime() the value of
average = (int) (((average * (numExpired-1)) + timeAlive)/numExpired);
is not needed.

Also that call can be moved out of synchronized(this).

Best regards,
Konstantin Kolinko

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

Reply via email to