jmeter测试服务器性能之数据连接数瓶颈分析和优化
2016-04-06 16:33
615 查看
前面搭建的测试环境linux+Servlet+mysql+tomcat都是采用的默认设置
先介绍一个在linux服务器下,批量kill掉mysql连接数的方法。
1)vi kill.sh 复制下面的代码进去
2)chmod 700 kill.sh
3)./kill.sh
单个用户无限次数运行
1)使用mysql的命令:show process命令可以看到mysql的连接数不断增加和释放。这是mysql的内部机制。释放不用的连接数,接入新的连接
大部分是在sleep状态
(https://img-blog.csdn.net/20160406163257343)
2)使用linux网络监控命令查看链接到tomcat服务器的连接数量
netstat -an|grep 8090
可以看到当用户连接服务器进行操作时,只会创建一个tcp连接,但是因为程序的原因,每次注册都会去连接数据库,所以数据库的连接数不断的增大。
增
- 加并发到10
监控连接结果如下
[root@localhost Desktop]# netstat -an|grep 8090|wc -l
20
[root@localhost Desktop]# netstat -an|grep 3306|wc -l
3229
可以看到数据库的连接数非常的大,而tomcat的连接数是20个
- 并发数量到达60的时候
从这可以看出来,错误率不断增加,说明系统不能支持60个用户并发。
但是分析一下,看到LoginServlet的错误率为零。可以知道tomcat的响应和连接没有问题,那么可以定位瓶颈是在程序与数据库的连接。
同样我使用navicat去连接mysql数据库,发现连接不上了提示too many connections
可以知道数据库的连接数已经超标了
- 优化1:扩大mysql的数据库连接数:
使用sql命令:
1)查看到数据库的最大连接数是150
show variables like ‘%max_connections%’;
2)扩大连接数
修改最大连接数
方法一:修改配置文件。推荐方法一
进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MySQL即可.
方法二:命令行修改。不推荐方法二
命令行登录MySQL后。设置新的MySQL最大连接数为200:
MySQL> set global max_connections=200。
这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改
我测试就先采用第二种方式
修改后查询
再使用60个用户进行并发测试,测试前先kill掉以前的连接。就不等mysql去释放了
优化后再测试
这时再使用show processlist;查看到的连接数已经达到350 明显大于前面默认的150的最大连接数。再看看测试结果,错误率已经明显降下来了:
我后面再把连接数该到600 错误消失。
总结:
通过增加用户并发数,定位和分析得出数据库连接数配置瓶颈,通过增加mysql数据库连接数,再进行测试,错误消失,性能得到优化。
几分钟完成了1.8W用户的注册
jmeter连接mysql数据库失败的错误响应代码:
后面就接着分析tomcat连接数瓶颈和系统内存,cpu瓶颈等等。不断学习和总结当中。
先介绍一个在linux服务器下,批量kill掉mysql连接数的方法。
1)vi kill.sh 复制下面的代码进去
2)chmod 700 kill.sh
3)./kill.sh
#!/bin/bash for id in `mysql -hlocalhost -uroot -e"show processlist;"|awk '{print $1}'` do echo $id mysql -hlocalhost -uroot -e"kill $id" done
单个用户无限次数运行
1)使用mysql的命令:show process命令可以看到mysql的连接数不断增加和释放。这是mysql的内部机制。释放不用的连接数,接入新的连接
大部分是在sleep状态
(https://img-blog.csdn.net/20160406163257343)
2)使用linux网络监控命令查看链接到tomcat服务器的连接数量
netstat -an|grep 8090
可以看到当用户连接服务器进行操作时,只会创建一个tcp连接,但是因为程序的原因,每次注册都会去连接数据库,所以数据库的连接数不断的增大。
增
- 加并发到10
监控连接结果如下
[root@localhost Desktop]# netstat -an|grep 8090|wc -l
20
[root@localhost Desktop]# netstat -an|grep 3306|wc -l
3229
可以看到数据库的连接数非常的大,而tomcat的连接数是20个
- 并发数量到达60的时候
从这可以看出来,错误率不断增加,说明系统不能支持60个用户并发。
但是分析一下,看到LoginServlet的错误率为零。可以知道tomcat的响应和连接没有问题,那么可以定位瓶颈是在程序与数据库的连接。
同样我使用navicat去连接mysql数据库,发现连接不上了提示too many connections
可以知道数据库的连接数已经超标了
- 优化1:扩大mysql的数据库连接数:
使用sql命令:
1)查看到数据库的最大连接数是150
show variables like ‘%max_connections%’;
mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+ 1 row in set
2)扩大连接数
修改最大连接数
方法一:修改配置文件。推荐方法一
进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MySQL即可.
方法二:命令行修改。不推荐方法二
命令行登录MySQL后。设置新的MySQL最大连接数为200:
MySQL> set global max_connections=200。
这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改
我测试就先采用第二种方式
修改后查询
mysql> set global max_connections=400; Query OK, 0 rows affected mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 400 | +-----------------+-------+ 1 row in set
再使用60个用户进行并发测试,测试前先kill掉以前的连接。就不等mysql去释放了
优化后再测试
这时再使用show processlist;查看到的连接数已经达到350 明显大于前面默认的150的最大连接数。再看看测试结果,错误率已经明显降下来了:
我后面再把连接数该到600 错误消失。
总结:
通过增加用户并发数,定位和分析得出数据库连接数配置瓶颈,通过增加mysql数据库连接数,再进行测试,错误消失,性能得到优化。
几分钟完成了1.8W用户的注册
mysql> select count(*) from test.userinfo -> ; +----------+ | count(*) | +----------+ | 18721 | +----------+ 1 row in set
jmeter连接mysql数据库失败的错误响应代码:
eport</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b></p><pre>java.lang.NullPointerException
后面就接着分析tomcat连接数瓶颈和系统内存,cpu瓶颈等等。不断学习和总结当中。
相关文章推荐
- MySQL中的integer 数据类型
- java-模拟tomcat服务器
- MySQL存储过程
- 小心服务器内存居高不下的元凶--WebAPI服务
- i-jetty环境搭配与编译
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- 运维入门
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- Linux部署Tomcat服务器
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- jenkins------结合maven将svn项目自动部署到tomcat下
- 如何搞定tomcat这只喵~