Class StuckThreadDetectionValve

All Implemented Interfaces:
MBeanRegistration, Contained, JmxEnabled, Lifecycle, Valve

public class StuckThreadDetectionValve extends ValveBase
This valve allows to detect requests that take a long time to process, which might indicate that the thread that is processing it is stuck.
  • Constructor Details

    • StuckThreadDetectionValve

      public StuckThreadDetectionValve()
      Required to enable async support.
  • Method Details

    • setThreshold

      public void setThreshold(int threshold)
      Specifies the threshold (in seconds) used when checking for stuck threads. If <=0, the detection is disabled. The default is 600 seconds.
      Parameters:
      threshold - The new threshold in seconds
    • getThreshold

      public int getThreshold()
      Returns:
      The current threshold in seconds
      See Also:
    • getInterruptThreadThreshold

      public int getInterruptThreadThreshold()
    • setInterruptThreadThreshold

      public void setInterruptThreadThreshold(int interruptThreadThreshold)
      Specifies the threshold (in seconds) before stuck threads are interrupted. If <=0, the interruption is disabled. The default is -1. If >=0, the value must actually be >= threshold.
      Parameters:
      interruptThreadThreshold - The new thread interruption threshold in seconds
    • initInternal

      protected void initInternal() throws LifecycleException
      Description copied from class: LifecycleBase
      Sub-classes implement this method to perform any instance initialisation required.
      Overrides:
      initInternal in class ValveBase
      Throws:
      LifecycleException - If the initialisation fails
    • invoke

      public void invoke(Request request, Response response) throws IOException, ServletException
      Description copied from interface: Valve

      Perform request processing as required by this Valve.

      An individual Valve MAY perform the following actions, in the specified order:

      • Examine and/or modify the properties of the specified Request and Response.
      • Examine the properties of the specified Request, completely generate the corresponding Response, and return control to the caller.
      • Examine the properties of the specified Request and Response, wrap either or both of these objects to supplement their functionality, and pass them on.
      • If the corresponding Response was not generated (and control was not returned, call the next Valve in the pipeline (if there is one) by executing getNext().invoke().
      • Examine, but not modify, the properties of the resulting Response (which was created by a subsequently invoked Valve or Container).

      A Valve MUST NOT do any of the following things:

      • Change request properties that have already been used to direct the flow of processing control for this request (for instance, trying to change the virtual host to which a Request should be sent from a pipeline attached to a Host or Context in the standard implementation).
      • Create a completed Response AND pass this Request and Response on to the next Valve in the pipeline.
      • Consume bytes from the input stream associated with the Request, unless it is completely generating the response, or wrapping the request before passing it on.
      • Modify the HTTP headers included with the Response after the getNext().invoke() method has returned.
      • Perform any actions on the output stream associated with the specified Response after the getNext().invoke() method has returned.
      Parameters:
      request - The servlet request to be processed
      response - The servlet response to be created
      Throws:
      IOException - if an input/output error occurs, or is thrown by a subsequently invoked Valve, Filter, or Servlet
      ServletException - if a servlet error occurs, or is thrown by a subsequently invoked Valve, Filter, or Servlet
    • backgroundProcess

      public void backgroundProcess()
      Description copied from class: ValveBase
      Execute a periodic task, such as reloading, etc. This method will be invoked inside the classloading context of this container. Unexpected throwables will be caught and logged.

      The default implementation is NO-OP.

      Specified by:
      backgroundProcess in interface Valve
      Overrides:
      backgroundProcess in class ValveBase
    • getStuckThreadCount

      public int getStuckThreadCount()
    • getStuckThreadIds

      public long[] getStuckThreadIds()
    • getStuckThreadNames

      public String[] getStuckThreadNames()
    • getInterruptedThreadsCount

      public long getInterruptedThreadsCount()