mysql并发
之前看一个老师的视频上说,MySQL最大并发是几百,所以想测试一下MySQL的最大并发数,用到下面这个命令,可以用--help查用法
-c是指并发量,-i是指重复多少次,这里我没有设置
mysqlslap -uroot -p -c 500 -i 10 -a
默认设置情况下,最大是563,不知道为什么是这个数,再多并发就报错了。 然后想修改一下配置看有没有用。下面这个命令是查看配置文件引入顺序的
mysql --verbose --help | grep my.cnf
修改下配置文件,在[mysqld]模块下加上max_connections=10
vi /usr/local/etc/my.cnf
这时候再测试,200就报错了,那我增大呢,把max_connections设置为1000,结果还是500多就报错了,
Error when connecting to server: 2001 Can't create UNIX socket (24)
经过查询得知,文件描述符是有上限的,Mac OS可以用
ulimit -a / -n
来看上限,我的系统默认是256,那我来改成5000,这样在测试mysql并发,1000并发也不会报错了,但是这个只是针对当前会话,再打开一个终端不起作用。
为啥报错
为啥不能创建socket就报错了,为啥增大文件描述符就不报错了。首先要知道mysql登录方式,mysql有两种登录方式,tcp和socket,如果连接时没指定,默认就是socket,sock文件在
/tmp/mysql.sock
而且我试过了,tcp和socket连接最大并发还不一样,tcp的要少一点。
然后我们看一下socket和文件描述符fd啥关系,为什么
socket是啥
上边的错误说是不能创建socket了,然后我就想知道socket到底是啥
参考下面继续整理 www.cnblogs.com/clschao/art…
任何软件工程遇到的问题都可以通过增加一个中间层来解决。socket就是一个处于应用层和传输层之间的中间层,来封装tcp或者udp协议的细节,暴露出api给用户使用。
Linux一切皆文件,无论文件IO还是网络IO,都需要文件描述符,socket也一样,而上文讲到,文件描述符是有限的,所以不能创建socket,就无法创建连接了,然后大量并发就报错了
ab测试
除了上边说的MySQL自带的测试工具,还可以用ab测试。一样也会报错
ab -n 1000 -c 200 localhost:8998/tim