Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Document what is the lifetime of Request/Response objects. Reference the specification.

...

  1. Look into Tomcat access log (the log file generated by AccessLogValve).
    • If your request is not listed there, then it has not been processed by Tomcat. You need to look elsewhere (e.g. at your firewall).
    • You will see what IP address your client is using, and whether it is using an IPv4 (127.0.0.1) or IPv6 address (0:0:0:0:0:0:0:1). Modern operating systems can use IPv6 addresses for localhost / local network access, while external network is still using IPv4.
      2. Take a thread dump. This way you will find out what Tomcat is actually doing.
    • If you are troubleshooting some process that takes noticeable time, take several (three) thread dumps with some interval between them. This way you will see if there are any changes, any progress.
      3. Try debugging.
    • A good place for a breakpoint is org.apache.catalina.connector.CoyoteAdapter.service() method. That is the entry point from Tomcat connectors and into the Servlet engine. At that place your request has already been received and its processing starts.

Troubleshooting unexpected Response

...

state problems

If you encounter problems that manifest themselves as accessing a request / or response that is an inconsistent state.

...

The main suspect is your own web application keeping a reference to Request / Response objects outside of their life cycle. (*)

  1. Set the following system property in Tomcat configuration:
    org.apache.catalina.connector.RECYCLE_FACADES=true
    This When flag instructs Tomcat to recycle is set, Tomcat recycles facades to its internal objects , so that it is when request processing completes. This makes it easier to spot illegal access when it happens, instead of waiting until internal state of referenced object becomes corrupted from concurrent accessside effects of such access become visible.

This flag is also mentioned on the Security Considerations page. The flag is true when Tomcat runs with enabled Java Security Manager.
2. Read about Java ImageIO issue.

(*) Note

The lifetime of the Response object is documented in the Servlet specification. Quoting from section "5.8 Lifetime of the Response Object" of Servlet 4.0 specification:

Each response object is valid only within the scope of a servlet’s service method, or within the scope of a filter’s doFilter method, unless the associated request object has asynchronous processing enabled for the component. If asynchronous processing on the associated request is started, then the response object remains valid until complete method on AsyncContext is called.

In case of asynchronous processing, when an error occurs Tomcat notifies all registered AsyncListener}}s and then calls {{complete() automatically if none of the listeners have called it yet. (Reference: 61768)

Also see sections "2.3.3.4 Thread Safety" and "3.13 Lifetime of the Request Object" of the same specification.

...

CategoryFAQ