On 14/02/2013 02:22, Steve van Loben Sels wrote:
> Greetings.
> 
> I recently upgraded from Tomcat 6.0.36 to 7.0.35 with the native APR
> connector, and I ran into a problem with numbers  in my access Log.  I use
> the %D ("Time taken to process the request, in millis") to measure the
> service delivery quality of the application deployed to Tomcat, and it
> showed a large increase in average response time after the upgrade.  I had
> other independent metrics in place that showed that the performance of the
> application had actually improved, so I thought maybe that there was
> instead a difference in how the request time was being measured in the 6.0
> and 7.0 releases.

Correct.

> By writing some test cases, I was able to see that the increase in the
> measured time was due to time waiting to fill the internal buffer while
> parsing the headers in that same code block.  I'm assuming that in the 6.0
> server, the header data already buffered and was immediately available
> whereas the 7.0 server was still waiting on the client transmission.  I
> tried increasing the maxHttpHeaderSize since I see that the buffer size is
> directly correlated to that value, but it had no effect on the behavior.

The reason is that in Tomcat 6 start and end time for the request was
measured at the point the request/response entered/left the
AccessLogValve which is after the connector.

In Tomcat 7 the access logging was refactored to take the full request
time into account - mainly to align it with httpd.

> For fun, I also tried out the other connector types.  BIO suffered from the
> same problem whereas the NIO connector exhibited the old behavior.
>  Unfortunately, I'm tied to the APR connector for the SSL implementation.

There is a bug in the NIO connector. The NIO connector is non-blocking
while reading the headers and the start time gets reset every time
another bit of the headers are read. That needs fixing.

> I'm wondering, is there some knob I can turn to restore the old behavior?

Short answer. No.

>  I looked through all the documentation and the change log to see if
> anything jumped out at me, but I couldn't come up with anything.  It looks
> as though the APR connector is treated more or less as a black box.  The
> time taken is an important metric for me to determine that my application
> is meeting an SLA, so it would be great to get it back to how it was
> working before.

Long answer. Depending on exactly what you need you could either extend
the existing AccessLogValve and modify how the request time is
calculated or your could write a simple valve that logs what you need.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to