欢迎访问原文:
【Druid】Druid监控SSM项目性能-配置与实例
以前弄项目的时候,也没配置druid性能监控,但是随着用户的增多,有的时候网站访问慢了,就想知道哪个地方遇到了性能问题,然后好对方法以及sql进行优化,该加索引的加索引,该缓存的去缓存。
Druid是阿里巴巴开源平台上一个数据库连接池实现(网上都说这个是目前java最好的连接池)。Druid还能够提供强大的监控和扩展功能。
Druid是一个开源项目,源码托管在github上,源代码仓库地址是 :
https://github.com/alibaba/druid
能做到精度在方法级的监控,方便你找出在哪个方法上,哪个sql语句上花费的时间最多,然后做出针对性优化
com.alibaba
druid
1.1.0
在Maven仓库的地址,自己配置另外的版本:
http://www.mvnrepository.com/artifact/com.alibaba/druid
在spring的配置文件中,数据源的配置
...
"dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close"
p:driverClassName="${driverClassName}"
p:url="${jdbc_url}"
p:username="${jdbc_username}"
p:password="${jdbc_password}"
p:initialSize="${jdbc_init}"
p:minIdle="${jdbc_minIdle}"
p:maxActive="${jdbc_maxActive}"
p:filters="${druid_filters}"
>
...
p:filters 配置值为:stat,wall,log4j
监控统计用的filter:stat
日志用的filter:log4j
防御sql注入的filter:wall
你可以自己选择配置,多个配置之间用英文逗号隔开
...
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
loginUsername
root
loginPassword
chenhaoxiang
DruidStatView
/druid/*
...
可以配置用户名和密码,也可以配置白名单。如果不配置用户名密码,就是任何人都可以访问了。
访问地址:
http://127.0.0.1:8080/项目名称/druid/index.html
输入账号密码登录之后
访问 http://localhost:8080/insert?name=chx
插入数据
可以看到sql语句执行的性能
比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况
现在还只能看数据源和SQL监控,SQL防火墙,Web应用,URL监控,Session监控,Spring监控未开启
web.xml中配置
DruidWebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
profileEnable
true
DruidWebStatFilter
/*
既然是Spring项目,肯定要监控一下Spring的Bean啦
结合spring的AOP特性对代码的运行效果进行监控,druid可以做到方法级别的监控,这个功能可以让你发现方法的调用频率及方法的运行时间,及时做出调整和修正使得项目更健壮。
spring配置文件
...
"druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" />
"druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
"patterns">
com.uifuture.user.service.*
com.uifuture.user.dao.*
"true"/>
"druid-stat-interceptor"
pointcut-ref="druid-stat-pointcut" />
...
在SQL监控中,有一项关于sql执行最慢执行时间的统计,但是只有一个值,就是一条sql语句最慢的执行时间记录。我们可以对执行在时间超过某个时间的sql语句进行日志输出,方便进行性能优化
修改数据源配置:
"dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close"
p:driverClassName="${driverClassName}"
p:url="${jdbc_url}"
p:username="${jdbc_username}"
p:password="${jdbc_password}"
p:initialSize="${jdbc_init}"
p:minIdle="${jdbc_minIdle}"
p:maxActive="${jdbc_maxActive}"
p:filters="${druid_filters}"
>
"proxyFilters">
配置慢sql时间及日志拦截器
"stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
"slowSqlMillis" value="1000"/>
"logSlowSql" value="true"/>
"log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
"dataSourceLogEnabled" value="true" />
"statementExecutableSqlLogEnable" value="true" />
在这里,因为我是在本地进行,数据量又小,我将时间设置为了5ms,以方便测试
修改log4j配置文件,增加慢sql日志的输出策略
#####配置根元素
log4j.rootLogger=INFO,console,file,error,druid
...
# Druid 慢查询记录日志
log4j.logger.druid.sql=WARN,druid
log4j.logger.druid.sql.DataSource=WARN,druid
log4j.logger.druid.sql.Connection=WARN,druid
log4j.logger.druid.sql.Statement=WARN,druid
log4j.appender.druid=org.apache.log4j.DailyRollingFileAppender
log4j.appender.druid.layout=org.apache.log4j.PatternLayout
log4j.appender.druid.layout.ConversionPattern= [%p] %d{yyyy-MM-dd HH\:mm\:ss} [%l] -> %m [%t] [chx]%n
log4j.appender.druid.datePattern='.'yyyy-MM-dd
log4j.appender.druid.Threshold = WARN
log4j.appender.druid.append=true
log4j.appender.druid.File=${catalina.home}/logs/druid_spring_config/druid-slow-sql.log
# ${catalina.home}是在tomcat的目录下
由于设置了慢sql的时间为大于5毫秒,所以执行时间大于5毫秒的都会被红色标注。
再看日志文件:
已经将查询慢的sql打印了出来
如果你在使用过程中遇到其他无法解决的druid问题,或者想配置另外的东西,可以访问下面的地址,官方的文档都在这里
https://github.com/alibaba/druid/wiki/常见问题
最后,写的这个小测试druid的项目就上传一下了。需要源码的朋友可以去下载看一下
GITHUB源码地址: 【点我进行访问】
本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。
转载请注明出处:http://chenhaoxiang.cn/2018/02/06/2255/
本文源自【谙忆的博客】