Druid Monitor监控JavaSE和JavaWeb

Druid Monitor

对于数据源,相信大家已经接触了不少了。比如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项目

先说明一下数据源的配置情况吧,例:



	
	
	
		 
		
		
		
		
		
	
		
		
		
		
	
		
		
	
		
		
	
		
		
		
		
		
		
		
		
	
		
		
		
	
		
		
		
		
		 
		
		
		
			
				
				
			
		
	
	
	
	
		
		
		
	
	
	
		
		
	
	
	
    
 
    
        
            
                com.XXX.stat.service.*
                com.XXX.stat.dao.*
            
        
    
    
    
        
    

尽管Druid已经说明只需要配置数据库中的url地址就可以帮我们自动来匹配driverClassName,但是发现如果不配置这个,日志中总是有一些警告,所以就配置了一下。官网提供了一下他自己的driverClassName有:

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
接下来说一下web.xml中的配置参数都有什么,这里你也可以配置loginUserName和loginPassword,避免所有的人都可以看到你自己的数据库情况。这样子在你登录监控页面的时候就必须输入密码才可以访问了。当然也可以把你的IP加到allow之中,这样就只有你自己的机器可以访问这个监控界面了。例:

		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
    Druid Monitor监控JavaSE和JavaWeb_第1张图片
输入用户名密码(druid/druid)就可以进入监控页面。
 Druid Monitor监控JavaSE和JavaWeb_第2张图片


2.Druid Monitor监控JavaSE项目


监控javaSE项目可以通过jmx访问远程服务端,也可以通过到服务端运行官网提供的druidStat.sh命令。先说明一下怎么通过Jmx来访问,这一种既方便也不至于登录生产环境的服务器。
首先既然需要使用Jmx来访问,那么服务端就必须提供Jmx的访问端口和IP地址。那么需要在我们的启动文件中增加java的运行参数。需要添加-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname -Dcom.sun.management.jmxremote.port -Dcom.sun.management.jmxremote.authenticate -Dcom.sun.management.jmxremote.ssl参数来暴漏自己的服务器地址。例:linux的运行脚本
Druid Monitor监控JavaSE和JavaWeb_第3张图片
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 &

然后再部署一个web项目来访问这个JMX的IP和端口。启动服务,检查我们的端口是否已经启动

Druid Monitor监控JavaSE和JavaWeb_第4张图片

最后在我们本地的web.xml中配置jmxUrl地址来访问就可以查看到数据源的监控数据。例

	 
	
		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  $@

有了这个脚本,我们就可以直接在服务器上运行看到统计信息。这里我只说明一下linux的查看方式。我们修改一下druidStat.sh的druid-0.2.6.jar的目录和名称,然后放到自己的服务器上运行即可。先说明一下命令的使用方法吧。

Druid Monitor监控JavaSE和JavaWeb_第5张图片

看到了druidStat.sh的命令帮助,相信大家已经会了一多半了。接下来说明一下怎么使用。直接上图:
Druid Monitor监控JavaSE和JavaWeb_第6张图片
如果需要查看某一个ID的具体情况,可以使用-id -detail来查看sql的详情。

Druid Monitor监控JavaSE和JavaWeb_第7张图片

结尾:提供一个本项目的下载地址:http://download.csdn.net/detail/binglovezi/9422882
这个只是一个tomcat的运行项目包,而非源码包,所以直接复制到自己的tomcat中,然后修改其中的参数即可,不要导入到自己的eclipse中了。



你可能感兴趣的:(java)