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

How to find out the number of instances of a servlet running in Tomcat?

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

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

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

谈到 Java EE 应用程序监控时,我总是启动 JDK 附带的 jconsole 工具,看看应用程序服务器公开了哪些信息。例如,这就是您在连接到 Tomcat 和 select Catalina -> Servlet -> Your servlet -> attributes 时在 MBean 选项卡上看到的内容:

我不确定这是否是您要查找的内容,因为我以前没有使用过 STM Servlet,但您肯定可以在那里找到一些有用的信息。

以下应该有效:

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,但对于 [=11= 的简单 ++-- 来说,这不是必需的].