druid连接池监控
项目中使用的数据库连接池是阿里开源的druid连接池,经常会有一些场景需要监控和统计数据源、sql的执行情况,因此引入druid提供的监控druid monitor。
Druid是一个开源项目,源码托管在github上:https://github.com/alibaba/druid Druid 0.1.18之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xml中加上dependency就可以了。例如:
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid-version}</version>
- </dependency></span>
也可以选择 Maven仓库查找公共的仓库地址: http://www.mvnrepository.com/artifact/com.alibaba/druid
好了,废话也说了一大堆了。接下来说明一下怎么查看DruidDataSource的监控数据。
对于web项目,使用起来很方便,只需要在web.xml中配置一下DruidStatView就行了。其它的Druid已经帮我们都实现了。
1.Druid Monitor监控Java Web项目
先说明一下数据源的配置情况吧,例:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beansxmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
- <beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"
- destroy-method="close">
- <!-- 基本属性 url、user、password -->
- <propertyname="driverClassName"value="oracle.jdbc.OracleDriver"/>
- <propertyname="url"value="jdbc:oracle:thin:@192.168.102.93:1521:mydb1"/>
- <propertyname="username"value="my_v31"/>
- <propertyname="password"value="my_v31"/>
- <!-- 配置初始化大小、最小、最大 -->
- <propertyname="initialSize"value="1"/>
- <propertyname="minIdle"value="1"/>
- <propertyname="maxActive"value="20"/>
- <!-- 配置获取连接等待超时的时间 -->
- <propertyname="maxWait"value="60000"/>
- <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
- <propertyname="timeBetweenEvictionRunsMillis"value="60000"/>
- <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
- <propertyname="minEvictableIdleTimeMillis"value="300000"/>
- <!--
- 用来检测连接是否有效的sql,要求是一个查询语句。
- 如果validationQuery为null,testOnBorrow、testOnReturn、
- testWhileIdle都不会其作用
- -->
- <propertyname="validationQuery"value="SELECT 1 FROM DUAL"/>
- <propertyname="testWhileIdle"value="true"/>
- <propertyname="testOnBorrow"value="false"/>
- <propertyname="testOnReturn"value="false"/>
- <!--
- 打开PSCache,并且指定每个连接上PSCache的大小
- 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false
- -->
- <propertyname="poolPreparedStatements"value="true"/>
- <propertyname="maxPoolPreparedStatementPerConnectionSize"value="20"/>
- <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
- <propertyname="filters"value="stat,wall,log4j"/>
- <!--
- 如果配置了proxyFilters,此配置可以不配置
- druid.stat.mergeSql=true合并执行的相同sql,避免因为参数不同而统计多条sql语句
- druid.stat.slowSqlMillis=10000用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢
- <propertyname="connectionProperties"value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10000"/>
- -->
- <!-- 监控统计拦截的filters -->
- <!-- 并在filters属性中配置了log4j -->
- <propertyname="proxyFilters">
- <list>
- <refbean="stat-filter"/>
- <refbean="log-filter"/>
- </list>
- </property>
- </bean>
- <!-- 慢SQL记录-->
- <beanid="stat-filter"class="com.alibaba.druid.filter.stat.StatFilter">
- <propertyname="mergeSql"value="true"/>
- <propertyname="slowSqlMillis"value="10000"/>
- <propertyname="logSlowSql"value="true"/>
- </bean>
- <beanid="log-filter"class="com.alibaba.druid.filter.logging.Log4jFilter">
- <!-- <property name="resultSetLogEnabled" value="false" /> -->
- <!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->
- </bean>
- <!-- 配置druid监控spring jdbc -->
- <beanid="druid-stat-interceptor"class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"/>
- <beanid="druid-stat-pointcut"class="org.springframework.aop.support.JdkRegexpMethodPointcut"scope="prototype">
- <propertyname="patterns">
- <list>
- <value>com.XXX.stat.service.*</value>
- <value>com.XXX.stat.dao.*</value>
- </list>
- </property>
- </bean>
- <aop:configproxy-target-class="true">
- <aop:advisoradvice-ref="druid-stat-interceptor"pointcut-ref="druid-stat-pointcut"/>
- </aop:config>
- </beans>
- jdbc:derby:=org.apache.derby.jdbc.EmbeddedDriver
- jdbc:mysql:=com.mysql.jdbc.Driver
- jdbc:log4jdbc:=net.sf.log4jdbc.DriverSpy
- jdbc:oracle:=oracle.jdbc.driver.OracleDriver
- jdbc:microsoft:=com.microsoft.jdbc.sqlserver.SQLServerDriver
- jdbc:jtds:=net.sourceforge.jtds.jdbc.Driver
- jdbc:postgresql:=org.postgresql.Driver
- jdbc:fake:=com.alibaba.druid.mock.MockDriver
- jdbc:hsqldb:=org.hsqldb.jdbcDriver
- jdbc:db2:=COM.ibm.db2.jdbc.app.DB2Driver
- jdbc:sqlite:=org.sqlite.JDBC
- jdbc:ingres:=com.ingres.jdbc.IngresDriver
- jdbc:h2:=org.h2.Driver
- jdbc:mckoi:=com.mckoi.JDBCDriver
- <filter>
- <filter-name>DruidWebStatFilter</filter-name>
- <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
- <init-param>
- <!-- 经常需要排除一些不必要的url,比如.js,/jslib/等等。配置在init-param中 -->
- <param-name>exclusions</param-name>
- <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
- </init-param>
- <!-- 缺省sessionStatMaxCount是1000个。你可以按需要进行配置 -->
- <init-param>
- <param-name>sessionStatMaxCount</param-name>
- <param-value>1000</param-value>
- </init-param>
- <!-- druid 0.2.7版本开始支持profile,配置profileEnable能够监控单个url调用的sql列表 -->
- <init-param>
- <param-name>profileEnable</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>principalSessionName</param-name>
- <param-value>users.username</param-value>
- </init-param>
- <!-- 你可以关闭session统计功能
- <init-param>
- <param-name>sessionStatEnable</param-name>
- <param-value>true</param-value>
- </init-param>-->
- </filter>
- <servlet>
- <servlet-name>DruidStatView</servlet-name>
- <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
- <!--
- deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
- 如果allow没有配置或者为空,则允许所有访问
- -->
- <init-param>
- <param-name>allow</param-name>
- <param-value>128.242.127.1/24,127.0.0.1</param-value>
- </init-param>
- <init-param>
- <param-name>deny</param-name>
- <param-value>192.168.1.118</param-value>
- </init-param>
- <!-- 在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,会导致所有计数器清零,重新计数 -->
- <spanstyle="white-space:pre"></span><init-param>
- <spanstyle="white-space:pre"></span><param-name>resetEnable</param-name>
- <spanstyle="white-space:pre"></span><param-value>false</param-value>
- <spanstyle="white-space:pre"></span></init-param>
- <spanstyle="white-space:pre"></span><!-- 用户名和密码 -->
- <spanstyle="white-space:pre"></span><init-param>
- <param-name>loginUsername</param-name>
- <param-value>druid</param-value>
- </init-param>
- <init-param>
- <param-name>loginPassword</param-name>
- <param-value>druid</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>DruidStatView</servlet-name>
- <url-pattern>/druid/*</url-pattern>
- </servlet-mapping>
配置好web.xml之后,启动自己的JavaWeb服务,访问一下地址就可以看到Druid的监控界面。我在这里的访问地址是:http://192.168.1.118:8778/druid-monitor/druid/sql.html
输入用户名密码(druid/druid)就可以进入监控页面。
- RESINWEBINF=/home/v31/common-biz
- LIBDIRS=${RESINWEBINF}/lib
- CP=.:${RESINWEBINF}/resources
- for Jars in `ls ${LIBDIRS}`
- do
- CP=${CP}:${LIBDIRS}/${Jars}
- done
- java -Xms2048m -Xmx2048m -cp ${CP} -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.76 -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false com.company.main.StartMain >>logs/error.log 2>&1 &
- <servlet>
- <servlet-name>DruidStatView</servlet-name>
- <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
- <!-- 远程访问JavaSE项目使用jmx连接 -->
- <init-param>
- <param-name>jmxUrl</param-name>
- <param-value>service:jmx:rmi:///jndi/rmi://192.168.1.76:9004/jmxrmi</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>DruidStatView</servlet-name>
- <url-pattern>/druid/*</url-pattern>
- </servlet-mapping>
配置好这些之后访问我们自己的web容器,发现果然可以查看统计信息了。还有人使用jconsole来访问,这个我没有尝试过,因为觉得那个操作对我来说太麻烦了。
3.Druid Monitor监控,使用druidStat.sh
这个命令脚本在git源码的druid\src\main\scripts目录下,
druidStat.bat脚本为:
- @echo off
- rem Copyright 1999-2011 Alibaba Group Holding Ltd.
- rem
- rem Licensed under the Apache License, Version 2.0 (the "License");
- rem you may not use this file except in compliance with the License.
- rem You may obtain a copy of the License at
- rem
- rem http://www.apache.org/licenses/LICENSE-2.0
- rem
- rem Unless required by applicable law or agreed to in writing, software
- rem distributed under the License is distributed on an "AS IS" BASIS,
- rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- rem See the License for the specific language governing permissions and
- rem limitations under the License.
- set _RUNJAVA="%JAVA_HOME%\bin\java.exe"
- set _TOOLSJAR="%JAVA_HOME%\lib\tools.jar"
- %_RUNJAVA% -classpath "./druid-0.2.6.jar;%_TOOLSJAR%" com.alibaba.druid.support.console.DruidStat %*
druidStat.sh脚本为:
- #!/bin/sh
- if [ -z "$JAVA_HOME" ] ; then
- echo "Error: JAVA_HOME is not defined."
- exit 1
- fi
- "$JAVA_HOME/bin/java" -Dfile.encoding="UTF-8" -cp "./druid-0.2.6.jar:$JAVA_HOME/lib/tools.jar" com.alibaba.druid.support.console.DruidStat $@
druid连接池监控相关推荐
- 阿里Druid连接池监控的两个坑
转载自 注意:阿里Druid连接池监控的两个坑 阿里的Druid大家都知道是最好的连接池,其强大的监控功能是我们追求的重要特性.但在实际情况中也有不少坑,说下最近遇到的一个坑吧! 问题1:不断打印er ...
- druid 连接池监控报错 Sorry, you are not permitted to view this page.
使用Druid连接池的时候,遇到一个奇怪的问题,在本地(localhost)可以直接打开Druid连接池监控,在其他机器上打开会报错: Sorry, you are not permitted to ...
- 注意:阿里Druid连接池监控的两个坑
image 阿里的Druid大家都知道是最好的连接池,其强大的监控功能是我们追求的重要特性.但在实际情况中也有不少坑,说下最近遇到的一个坑吧! 问题1:不断打印error级别的错误日志 session ...
- druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库
一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...
- spring配置druid连接池和监控数据库访问性能
Druid连接池及监控在spring配置如下: [html] view plaincopy <bean id="dataSource" class="com.ali ...
- SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面
一.Druid连接池 1.druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能.功能强大,能防SQL注入,内置Login ...
- Spring学习总结(12)——Druid连接池及监控在spring配置
Druid连接池及监控在 spring 配置如下: <bean id="dataSource" class="com.alibaba.druid.pool.Dru ...
- Druid连接池开启数据库监控功能
web程序普遍的都会涉及到数据库的操作,为了提高系统的性能,在数据库操作上,几乎千篇一律的使用了数据库连接池技术,数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀 ...
- alibaba的druid连接池的监控的两种方法
alibaba的druid连接池的监控的两种场景 一.导入druid包,适用spring.springboot 1.导包(版本自选) 这里省略了数据库的其他包只关注druid的相关 <depen ...
最新文章
- 《数学之美》第3章 统计语言模型
- 期末复习、化学反应工程科目(第八、九章)
- 脚本示例 (Reporting Services)Microsoft Visual Basic .NET
- html-其他常见标签的使用
- (ZT)在日本市场推广 iPhone 应用的经验
- 你可能不知道的Spring Boot那点事
- 怎样启用win7的超级管理员账户
- %3c php $str1=,ThinkPHP5.0.215.1.* 代码执行和命令执行漏洞利用
- Umbraco中的Examine Search功能讲解
- 25. Magento 创建新闻模块(5)
- TypeScript:Web开发
- mysql表utf-8 字符串入库编码异常
- Reason of Random Initialization - Neural Networks
- canvas实现点连线动画
- 网络工程师面试真题——ACL与IP Prefix的区别
- java实验作业:银行账户
- matlab函数anova,MATLAB进行单因素方差分析——ANOVA
- 芯盾时代完成3亿元C轮融资,宽带资本领投 1
- Roblox剑九之剑二
- 数字与英文字母转换matlab,MATLAB编程:数值(0-25)转换成大写英文字母