Druid监控页的使⽤(极为⽅便定位性能问题)
背景:最近系统频繁被压测,使⽤100并发线程压测到时候,发现性能⼀直会越来越慢,最后稳定在2s左右就是上不去。当然我⾸先想到到是后台数据库到瓶颈,但是看了后台数据库到监控后
发现数据库到cpu和内存使⽤率都不⾼,那边是不是我某条sql慢呢,或者是连接池不够,在获取连接都时候等待呢?或者是⼤多数长事物阻塞了请求呢?或者是tomcat连接池都不够⽤呢?还是纯粹是我都代码逻辑慢呢?这个时候就是druid监控页⾯发挥作⽤都时候了。
Druid连接池是阿⾥巴巴开源的数据库连接池项⽬。Druid连接池为监控⽽⽣,内置强⼤的监控功能,监控特性不影响性能。功能强⼤,能防SQL注⼊,内置Loging能诊断Hack应⽤⾏为。
Druid连接池最初就是为监控系统采集jdbc运⾏信息⽽⽣的,它内置了 功能,能采集⾮常完备的连接池执⾏信息Druid连接池内置了能和Spring/Servlet关联监控的实现,使得监控Web应⽤特别⽅便Druid连接池内置了⼀个监控页⾯,提供了⾮常完备的监控信息,可以快速诊断系统的瓶颈。
让我们先来看看它 什么样⼦?
1、监控信息采集的StatFilter
2、SQL参数化合并监控
实际业务中,如果SQL不是⾛PreparedStatement,SQL没有参数化,这时SQL需要参数化合并监控才能真实反映业务情况。如下SQL:
select*from t where id =1
select*from t where id =2
select*from t where id =3
参数化后:
select*from t where id =?
参数化合并监控是基于SQL Parser语法解析实现的,是Druid连接池独⼀⽆⼆的功能。
3 执⾏次数、返回⾏数、更新⾏数和并发监控
StatFilter能采集到每个SQL的执⾏次数、返回⾏数总和、更新⾏数总和、执⾏中次数和和最⼤并发。并发监控的统计是在SQL执⾏开始对计数器加⼀,结束后对计数器减⼀实现的。可以采集到每个SQL的当前并发和采集期间的最⼤并发。
4 慢查监控
缺省执⾏耗时超过3秒的被认为是慢查,统计项中有包括每个SQL的最后发⽣的慢查的耗时和发⽣时的参数。
5 Exception监控
如果SQL执⾏时抛出了Exception,SQL统计项上会Exception有最后的发⽣时间、堆栈和Message,根据这些信息可以很容易定位错误原因。
6 区间分布
SQL监控项上,执⾏时间、读取⾏数、更新⾏数都有区间分布,将耗时分布成8个区间:
0 - 1 耗时0到1毫秒的次数
1 - 10 耗时1到10毫秒的次数
10 - 100 耗时10到100毫秒的次数
100 - 1,000 耗时100到1000毫秒的次数
1,000 - 10,000 耗时1到10秒的次数
10,000 - 100,000 耗时10到100秒的次数
100,000 - 1,000,000 耗时100到1000秒的次数
1,000,000 - 耗时1000秒以上的次数
记录耗时区间的发⽣次数,通过区分分布,可以很⽅便看出SQL运⾏的极好、普通和极差的分布。耗时区分分布提供了“执⾏+RS时分布”,是将执⾏时间+ResultSet持有时间合并监控,这个能⽅便诊断返回⾏数过多的查询。
7 内置监控DEMO
8 诊断⽀持
Druid连接池内置了,将Connection/Statement/ResultSet相关操作的⽇志输出,可以⽤于诊断系统问题,也可以⽤于Hack⼀个不熟悉的系统。
LogFilter可以输出连接申请/释放,事务提交回滚,Statement的Create/Prepare/Execute/Close,ResultSet的Open/Next/Close,通过LogFilter可以详细诊断⼀个系统的Jdbc⾏为。
5. 防SQL注⼊
SQL注⼊攻击是⿊客对数据库进⾏攻击的常⽤⼿段,Druid连接池内置了 提供防SQL注⼊功能,在不影响性能的同时防御SQL注⼊攻击。
5.1 基于语意的防SQL注⼊
Druid连接池内置了⼀个功能完备的SQL Parser,能够完整解析mysql、sql server、oracle、postgresql的语法,通过语意分析能够精确识别SQL注⼊攻击。
5.2 极低的漏报率和误报率
基于SQL语意分析,⼤量应⽤和反馈,使得Druid的防SQL注⼊拥有极低的漏报率和误报率。
5.3 防注⼊对性能影响极⼩
内置参数化后的Cache、⾼性能⼿写的Parser,使得打开防SQL注⼊对应⽤的性能基本不受影响。
参考阿⾥巴巴
StatFilter能采集到每个SQL的执⾏次数、返回⾏数总和、更新⾏数总和、执⾏中次数和和最⼤并发。并发监控的统计是在SQL执⾏开始对计数器加⼀,结束后对计数器减⼀实现的。可以采集到每个SQL的当前并发和采集期间的最⼤并发。
3.5 慢查监控
缺省执⾏耗时超过3秒的被认为是慢查,统计项中有包括每个SQL的最后发⽣的慢查的耗时和发⽣时的参数。
3.6 Exception监控
如果SQL执⾏时抛出了Exception,SQL统计项上会Exception有最后的发⽣时间、堆栈和Message,根据这些信息可以很容易定位错误原因。
3.7 区间分布
SQL监控项上,执⾏时间、读取⾏数、更新⾏数都有区间分布,将耗时分布成8个区间:
0 - 1 耗时0到1毫秒的次数
1 - 10 耗时1到10毫秒的次数
10 - 100 耗时10到100毫秒的次数
100 - 1,000 耗时100到1000毫秒的次数
1,000 - 10,000 耗时1到10秒的次数
10,000 - 100,000 耗时10到100秒的次数
druid连接池配置详解
100,000 - 1,000,000 耗时100到1000秒的次数
1,000,000 - 耗时1000秒以上的次数
记录耗时区间的发⽣次数,通过区分分布,可以很⽅便看出SQL运⾏的极好、普通和极差的分布。耗时区分分布提供了“执⾏+RS时分布”,是将执⾏时间+ResultSet持有时间合并监控,这个能⽅便诊断返回⾏数过多的查询。
3.8 内置监控DEMO
4. 诊断⽀持
Druid连接池内置了,将Connection/Statement/ResultSet相关操作的⽇志输出,可以⽤于诊断系统问题,也可以⽤于Hack⼀个不熟悉的系统。
LogFilter可以输出连接申请/释放,事务提交回滚,Statement的Create/Prepare/Execute/Close,ResultSet的Open/Next/Close,通过LogFilter可以详细诊断⼀个系统的Jdbc⾏为。
5. 防SQL注⼊
SQL注⼊攻击是⿊客对数据库进⾏攻击的常⽤⼿段,Druid连接池内置了 提供防SQL注⼊功能,在不影响性能的同时防御SQL注⼊攻击。
5.1 基于语意的防SQL注⼊
Druid连接池内置了⼀个功能完备的SQL Parser,能够完整解析mysql、sql server、oracle、postgresql的语法,通过语意分析能够精确识别SQL注⼊攻击。
5.2 极低的漏报率和误报率
基于SQL语意分析,⼤量应⽤和反馈,使得Druid的防SQL注⼊拥有极低的漏报率和误报率。
5.3 防注⼊对性能影响极⼩
内置参数化后的Cache、⾼性能⼿写的Parser,使得打开防SQL注⼊对应⽤的性能基本不受影响。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。