Class StuckThreadDetectionValve

  • All Implemented Interfaces:
    javax.management.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 Detail

      • StuckThreadDetectionValve

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

      • 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:
        setThreshold(int)
      • 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: LifecycleMBeanBase
        Sub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.
        Overrides:
        initInternal in class ValveBase
        Throws:
        LifecycleException - If the initialisation fails
      • invoke

        public void invoke​(Request request,
                           Response response)
                    throws java.io.IOException,
                           ServletException

        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:
        java.io.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.
        Specified by:
        backgroundProcess in interface Valve
        Overrides:
        backgroundProcess in class ValveBase
      • getStuckThreadCount

        public int getStuckThreadCount()
      • getStuckThreadIds

        public long[] getStuckThreadIds()
      • getStuckThreadNames

        public java.lang.String[] getStuckThreadNames()
      • getInterruptedThreadsCount

        public long getInterruptedThreadsCount()