jmeter测试服务器性能之数据连接数瓶颈分析和优化

  • 前面搭建的测试环境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
jmeter测试服务器性能之数据连接数瓶颈分析和优化_第1张图片
可以知道数据库的连接数已经超标了
- 优化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数据库失败的错误响应代码:

eportp><p><b>messageb> <u>u>p><p><b>descriptionb> <u>The server encountered an internal error that prevented it from fulfilling this request.u>p><p><b>exceptionb>p><pre>java.lang.NullPointerException

后面就接着分析tomcat连接数瓶颈和系统内存,cpu瓶颈等等。不断学习和总结当中。

你可能感兴趣的:(jmeter性能测试,linux系统)