参考:
http://blog.csdn.net/binglovezi/article/details/50610269
两种方式:
第一种方式.jmx
(2)修改项目的启动脚本,加上启动参数:
(2)随便找一个web项目,配置监控的过滤器:
第二种方式:sh
在服务端执行一下这个shell:
from: https://github.com/alibaba/druid/tree/master/src/main/scripts
请在{'-sql','-ds','-act'}参数中选择一个或多个
Usage: druidStat -help | -sql -ds -act [-detail] [-id id] <pid> [refresh-interval]
参数:
-help 打印此帮助信息
-sql 打印SQL统计数据
-ds 打印DataSource统计数据
-act 打印活动连接的堆栈信息
-detail 打印统计数据的全部字段信息
-id id 要打印的数据的具体id值
pid 使用druid连接池的jvm进程id
refresh-interval 自动刷新时间间隔, 以秒为单位
说明:
-sql,-ds,-act参数中要至少指定一种数据进行打印, 可以
组合使用, 比如 -sql -ds 一起的话就打印两种统计数据
-id id可以跟 -sql 或-ds组合, 比如 -sql -id 5 或 -ds -id 1086752
pid必需指定, refresh-interval可选, 如不指定,则打印数据后退出
pid和refresh-interval参数必需放在命令行的最后, 否则解析会出错
例子:
打印3983进程的sql 统计数据.
>druidStat -sql 3983
打印3983进程的ds统计数据.
>druidStat -ds 3983
打印3983进程的sql的id为10的详细统计数据.
>druidStat -sql -id 10 -detail 3983
打印3983进程的当前活动连接的堆栈信息
>druidStat -act 3983
打印3983进程的ds,sql,和act信息
>druidStat -ds -sql -act 3983
每隔5秒自动打印ds统计数据
>druidStat -ds 3983 5
如果是web项目呢?
(1)配置Druid的过滤器
当然,无论是web还是非web,两种情况下连接池的参数中一定要开启监控才行:
两种方式:
第一种方式.jmx
(2)修改项目的启动脚本,加上启动参数:
-Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.10.89
-Dcom.sun.management.jmxremote.port=9876
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
比如:
java -jar -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.10.89 -Dcom.sun.management.jmxremote.port=9876 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "business.jar" &
(2)随便找一个web项目,配置监控的过滤器:
<!-- driud监控 -->
<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.10.89:9876/jmxrmi</param-value>
</init-param>
<init-param>
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>loginPassword</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
第二种方式:sh
在服务端执行一下这个shell:
from: https://github.com/alibaba/druid/tree/master/src/main/scripts
#!/bin/sh
if [ -z "$JAVA_HOME" ] ; then
echo "Error: JAVA_HOME is not defined."
exit 1
fi
basepath=$(cd `dirname $0`; pwd)
dubboName=$(basename $basepath)
pid=$(ps -ef | grep $dubboName | grep -v grep | grep -v "$0" | awk '{print $2 }')
#echo $pid
"$JAVA_HOME/bin/java" -Dfile.encoding="UTF-8" -cp "./lib/druid-1.0.5.jar:$JAVA_HOME/lib/tools.jar" com.alibaba.druid.support.console.DruidStat $@ $pid
请在{'-sql','-ds','-act'}参数中选择一个或多个
Usage: druidStat -help | -sql -ds -act [-detail] [-id id] <pid> [refresh-interval]
参数:
-help 打印此帮助信息
-sql 打印SQL统计数据
-ds 打印DataSource统计数据
-act 打印活动连接的堆栈信息
-detail 打印统计数据的全部字段信息
-id id 要打印的数据的具体id值
pid 使用druid连接池的jvm进程id
refresh-interval 自动刷新时间间隔, 以秒为单位
说明:
-sql,-ds,-act参数中要至少指定一种数据进行打印, 可以
组合使用, 比如 -sql -ds 一起的话就打印两种统计数据
-id id可以跟 -sql 或-ds组合, 比如 -sql -id 5 或 -ds -id 1086752
pid必需指定, refresh-interval可选, 如不指定,则打印数据后退出
pid和refresh-interval参数必需放在命令行的最后, 否则解析会出错
例子:
打印3983进程的sql 统计数据.
>druidStat -sql 3983
打印3983进程的ds统计数据.
>druidStat -ds 3983
打印3983进程的sql的id为10的详细统计数据.
>druidStat -sql -id 10 -detail 3983
打印3983进程的当前活动连接的堆栈信息
>druidStat -act 3983
打印3983进程的ds,sql,和act信息
>druidStat -ds -sql -act 3983
每隔5秒自动打印ds统计数据
>druidStat -ds 3983 5
如果是web项目呢?
(1)配置Druid的过滤器
<!-- driud监控 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>loginPassword</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
当然,无论是web还是非web,两种情况下连接池的参数中一定要开启监控才行:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
<property name="driverClassName" value="${jdbc.driver}"/>
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${jdbc.pool.init}"/>
<property name="minIdle" value="${jdbc.pool.minIdle}"/>
<property name="maxActive" value="${jdbc.pool.maxActive}"/>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="${jdbc.testSql}"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
<property name="proxyFilters">
<list>
<ref bean="stat-filter" />
</list>
</property>
</bean>
<!-- 慢SQL记录-->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="mergeSql" value="true" />
<property name="slowSqlMillis" value="500" />
<property name="logSlowSql" value="true" />
</bean>