您的位置:首页 > 运维架构 > Tomcat

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

#!/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瓶颈等等。不断学习和总结当中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息