Program tuning - Druid和Linux配合优化数据库连接池配置
- 配置步骤
- 1. 添加依赖
- 2. 添加配置
- 3. 启动监控界面
- 常见问题
- 输入地址之后,浏览器直接打印html代码,而不是登录框
- 刷新页面不能重新加载数据
- 调优步骤
- 1. 开始压测
- 2. 监控线程池状态
- 3. 查看服务器状态
- 结论
配置步骤
1. 添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
2. 添加配置
spring:
datasource:
druid:
webStatFilter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
statViewServlet:
allow:
enabled: true
url-pattern: /druid/*
login-password: root
login-username: root
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
keep-alive: true
3. 启动监控界面
- 启动项目
- 浏览器输入
http://主机ip:项目端口/druid/login.html
- 账号密码是第2步yml配置的
login-username
和login-password
常见问题
输入地址之后,浏览器直接打印html代码,而不是登录框
可能是代码中使用了@WebFilter(urlPatterns = "*")
过滤器,并且,其中的urlPatterns参数是*
,程序就会拦住/druid/login.html并输出文本
刷新页面不能重新加载数据
需要在地址栏点击回车重新访问,刷新
和F5
没有效果
调优步骤
1. 开始压测
使用Jmeter开始压测
2. 监控线程池状态
数据库连接配置如下:
spring.datasource.druid.initialSize = 5
spring.datasource.druid.minIdle = 5
spring.datasource.druid.maxActive = 20
3. 查看服务器状态
查到压测目标服务的PID,运用下面的指令获取与数据库连接的闲置线程数:
netstat -anpt|grep 3306|grep TIME_WAIT |wc -l
结论
- 根据截图中的活跃线程数以及服务器的闲置线程数量来得出
spring.datasource.druid.maxActive
最优配置。 - 建议
spring.datasource.druid.initialSize
和spring.datasource.druid.minIdle
配置相同,防止服务频繁向操作系统请求线程,影响性能。