如何找出 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= 的简单 ++
和 --
来说,这不是必需的].
我非常了解 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= 的简单 ++
和 --
来说,这不是必需的].