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

本文介绍如何在Linux环境下通过调整MySQL配置来解决因连接数过多导致的问题,并提供了一种批量关闭连接的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 前面搭建的测试环境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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 单个用户无限次数运行

1)使用mysql的命令:show process命令可以看到mysql的连接数不断增加和释放。这是mysql的内部机制。释放不用的连接数,接入新的连接 
大部分是在sleep状态 
(https://img-blog.youkuaiyun.com/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

再使用60个用户进行并发测试,测试前先kill掉以前的连接。就不等mysql去释放了

  • 优化后再测试

这时再使用show processlist;查看到的连接数已经达到350 明显大于前面默认的150的最大连接数。再看看测试结果,错误率已经明显降下来了: 
这里写图片描述
我后面再把连接数该到600 错误消失。 
总结: 
通过增加用户并发数,定位和分析得出数据库连接数配置瓶颈,通过增加mysql数据库连接数,再进行测试,错误消失,性能得到优化。 
几分钟完成了1.8W用户的注册

mysql> select count(*) from test.userinfo
    -> ;
+----------+
| count(*) |
+----------+
|    18721 |
+----------+
1 row in set
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值