如何找出在Tomcat中运行的servlet的实例数?

时间:2015-08-21 20:46:24

标签: java servlet-3.0 tomcat8

我非常清楚Servlet默认是多线程的,即使它正在为多个请求提供服务,它也只会在容器中运行一个实例。但是,此规则的唯一例外是当servlet实现SingleThreadModel接口时。

我的问题是: 如何找出在给定时间点在Tomcat等容器中运行的servlet的实例数?

3 个答案:

答案 0 :(得分:3)

对于Java EE应用程序监视,我总是启动JDK附带的jconsole工具,并查看Application Server公开的信息。例如,这是您在连接到Tomcat时看到的内容,并在MBeans选项卡上选择Catalina -> Servlet -> Your servlet -> attributes

enter image description here

我不确定这是不是你要找的东西,因为我之前没有使用过STM Servlets,但你肯定能找到一些有用的信息。

答案 1 :(得分:2)

以下内容应该有效:

public class MyServlet extends HttpServlet {
    private static int activeRequests;

    public static int getActiveRequests() {
        return activeRequests;
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        activeRequests++;
        try {
            // do your processing here
        } finally {
            activeRequests--;
        }
    }

}

为了获得最佳并发性,您可以将int替换为AtomicInteger,但对于++的简单--int而言,这不是必需的。

答案 2 :(得分:1)

您可以定义一个私有静态int成员变量,并在创建servlet时递增它,在销毁时递减它。