对于数据源,相信大家已经接触了不少了。比如c3p0、dhcp、proxool等,之后又发现使用tomcat-jdbc可以大大的提高性能。但是针对于我们的高并发的系统来说,总希望能找到一个性能更好、更稳定的产品来代替。在开源中国上偶然发现了很多公司都在使用Druid这个数据源,然后搜索了一些相关资料,有人提供了这几个数据源的性能测试报告,突然发现这个数据源以很好的性能已经被大家普遍使用了。于是自己也把项目中的jdbc数据源替换为Druid了,然后让测试人员帮忙压了一下系统,发现性能有所提高。于是就想深入的研究一下这个数据源了。其实很多项目都是JavaSE的,但是官网针对于JavaSE的项目又没有具体说明应该怎么使用其监控统计功能。于是自己就看了一下源码发现了有配置jmxUrl的地方,可以想想这个应该就是针对于远程监控项目的配置了。在这里我就整理一下自己的使用情况供以后的人员参考,如果有错误的地方,也请大牛指证,我也多学习学习。
首先说明一下大家都知道的几个地址吧,也省的访客来回搜索了。
正式版本下载地址:http://repo1.maven.org/maven2/com/alibaba/druid/
Druid是一个开源项目,源码托管在github上:https://github.com/alibaba/druid
Druid 0.1.18之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xml中加上dependency就可以了。例如:
com.alibaba
druid
${druid-version}
也可以选择 Maven仓库查找公共的仓库地址: http://www.mvnrepository.com/artifact/com.alibaba/druid
好了,废话也说了一大堆了。接下来说明一下怎么查看DruidDataSource的监控数据。
对于web项目,使用起来很方便,只需要在web.xml中配置一下DruidStatView就行了。其它的Druid已经帮我们都实现了。
1.Druid Monitor监控Java Web项目
先说明一下数据源的配置情况吧,例:
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
DruidWebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
sessionStatMaxCount
1000
profileEnable
true
principalSessionName
users.username
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
allow
128.242.127.1/24,127.0.0.1
deny
192.168.1.118
resetEnable
false
loginUsername
druid
loginPassword
druid
DruidStatView
/druid/*
配置好web.xml之后,启动自己的JavaWeb服务,访问一下地址就可以看到Druid的监控界面。我在这里的访问地址是:http://192.168.1.118:8778/druid-monitor/druid/sql.html
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 &
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
jmxUrl
service:jmx:rmi:///jndi/rmi://192.168.1.76:9004/jmxrmi
DruidStatView
/druid/*
配置好这些之后访问我们自己的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 $@