I've loved using %D microsecond request duration logging for helping track down 
performance issues.  But I've always thought, "wouldn't it be cool if you could 
log how long Apache spent processing the request, versus how long it spent 
*sending* the request?"   So finally last week I said, "Self, why don't you 
write it?"  :)

I added a %w formatting directive to CustomLog via mod_log_config's 
log_pfn_register, and I used request_rec's notes table to store the serverwait 
microseconds until the request is finished.  It's been a long time since I've 
done much C, so my solution for storing the microsecond duration in the APR 
"table" was:

static const int get_server_wait(request_rec *r) {
    apr_time_t duration = apr_time_now() - r->request_time;
    apr_table_setn(r->notes, "serverwait-usec",
                apr_psprintf(r->pool, "%" APR_TIME_T_FMT, 
apr_time_usec(duration)));
    return OK;
}
I hooked this function into the Fix Ups phase, because it seemed the most 
popular "end of apache processing phase."  I still need to test in a proxy to 
JBoss type situation, but I know at least using a simple CGI script it didn't 
measure the CGI script processing, but I thought that might be unavoidable... 
And we don't really have many CGI scripts in production anyway.

I've done some brief load testing with "ab" and so far I don't think it adds a 
measurable amount of lag.  I have two questions.  First,  might there be a 
better hook phase to use to really capture Apache processing time?  And second, 
might there be a more efficient way to temporarily store the "serverwait-usec" 
value than doing a string conversion?

I'd be happy to share the code if anyone's interested.  Cheers!

- edan








-----------------------------------------
***Note:The information contained in this message may be privileged
and confidential and protected from disclosure. If the reader of
this message is not the intended recipient, or an employee or agent
responsible for delivering this message to the intended recipient,
you are hereby notified that any dissemination, distribution or
copying of this communication is strictly prohibited.  If you have
received this communication in error, please notify the Sender
immediately by replying to the message and deleting it from your
computer.  Thank you.  Premier Inc.

Reply via email to