On 16/11/2023 22:53, Pavan Veginati wrote:
Hi,
We are seeing random 404 and 505 errors with GET and POST requests.

Out of the 10 million daily requests in one cluster, there are 2-3 such 404 
errors. In another cluster with around 100 million daily requests, we are 
seeing 20-30 404s on average per day.
Requests with a 505 error are rare and only happen once or twice a week.

The same requests were successful a few milliseconds before and after the 
error. The servlet that handles these requests always returns a 200 with an 
appropriate error response if it fails, but never a 404. So, it is surprising 
to see a 404 response.

Hmm. Tomcat returns a 505 response in a single location. It does this when it doesn't understand the HTTP version that has been received in the request line.

Assuming the clients aren't sending malformed HTTP requests that suggests the input buffer is getting corrupted. That form of request mix-up is rare but has happened due to both Tomcat bugs and application bugs in the past.

I don't think there are any fixes since 8.5.88 that relate to this but it would be worth considering updating to 8.5.96.

Do you use any of:
- WebSocket
- Servlet asynchronous API
- Sendfile
- HTTP/2

I'm just trying to narrow down the areas of code we may need to look at.

I think the 505s offer the best opportunity to track this down as they only happen in one place and debug logging is available.

We've only had this issue in our test environment (similar to prod) a couple of 
times, but we can't reproduce it again.
I've found a similar issue reported here: 
https://lists.apache.org/thread/rxypsggr36joq8fcd44khjky9w4qf4xx

Deployment Details:
   Tomcat Version:
        8.5.88. Built from source.
   Java Version:
        JDK 17.
   Network Topology:
        Direct server to server internal calls with no load balancers in 
between.

Are there any known issues that could be causing this,

No.

and are there any specific logs we can enable that might help us debug this 
issue further ?

Enable debug logging for the Http11Processor. Add this to logging.properties:

org.apache.coyote.http11.Http11Processor.level=FINE

That will log additional detail for most failed requests (but not 404s).

Add %r in the access log pattern which will log the entire request line for every request.


For each 404, check the access log and see whether the request line is as expected.

For each 505, check both the access log and the standard log files.

If you can provide us with the request lines from the access log for each 404 (along with whether or not they are as you expect) and the request line and debug log entry for each 505 we will hopefully be able draw some further conclusions.

Given you are building from source, one possible investigative option is providing you with a custom patch that adds additional debug logging. If we reach the point where that would be helpful, is that something you'd consider?

Mark

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

Reply via email to