【问题标题】:monitor JDBC connections监控 JDBC 连接
【发布时间】:2012-12-12 16:04:11
【问题描述】:

我正在尝试使用 JMX 监控 tomcat 中的 JDBC 连接。

但它只提供有关数据源资源的信息,我想要在 Database.properties 文件中定义的连接状态。

有什么方法可以获取他们的状态吗?

【问题讨论】:

  • 我只想要繁忙和空闲线程的数量,而不是等待或阻塞状态。
  • 什么是Database.properties?和Tomcat有什么关系,这是什么框架?
  • 嗨,Rupinder,你终于找到这样的实用程序了吗?

标签: tomcat jdbc jmx


【解决方案1】:

您要求的不仅仅是 JNDI 数据源信息(例如繁忙和空闲线程)。

我强烈推荐此资源用于基于 JMX 的监控:

https://cwiki.apache.org/confluence/display/TOMCAT/Monitoring

【讨论】:

    【解决方案2】:

    通过这个 Servlet 3.0 示例,您可以监控 org.apache.tomcat.jdbc.pool.jmx.ConnectionPool 中的所有信息,包括空闲和活动连接。

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.lang.management.ManagementFactory;
    import java.util.Set;
    import javax.management.MBeanAttributeInfo;
    import javax.management.MBeanInfo;
    import javax.management.MBeanServer;
    import javax.management.ObjectName;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/poolmonitor")
    public class HelloServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();
            writer.println("<!DOCTYPE html>");
            writer.println("<html>");
            writer.println("<body>");
            writer.println("<p><h1>Tomcat Pool</h1></p><p>");
            try {
                MBeanServer server = ManagementFactory.getPlatformMBeanServer();
                Set<ObjectName> objectNames = server.queryNames(null, null);
                for (ObjectName name : objectNames) {
                    MBeanInfo info = server.getMBeanInfo(name);
                    if (info.getClassName().equals(
                            "org.apache.tomcat.jdbc.pool.jmx.ConnectionPool")) {
                        for (MBeanAttributeInfo mf : info.getAttributes()) {
                            Object attributeValue = server.getAttribute(name,
                                    mf.getName());
                            if (attributeValue != null) {
                                writer.println("" + mf.getName() + " : "
                                        + attributeValue.toString() + "<br/>");
    
                            }
                        }
                        break;
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            writer.println("</p></body>");
            writer.println("</html>");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2012-01-04
      • 2012-11-07
      相关资源
      最近更新 更多