http://blog.csdn.net/tylerpiece/article/details/53114392
因为是自己调试着玩,系统环境比较low,只是一个虚拟机。
要测试并发,首先要将系统能支持的文件描述符数更改,默认系统是1024。
修改的文件为/etc/security/limits.conf
在底下增加一行* - nofile 100000
重启系统。执行ulimit -n,看到结果是100000。
如果只是临时想更改文件描述符数,只需要执行ulimit -n 100000,这样只会在当前终端上生效。
修改好文件描述符后,做并发5000的测试,发现nginx报错,报错内容为worker connections not enough,上网查找结果是在
nginx.conf的events中,修改配置worker_connections 1024 ,将1024改为20000。
在配置文件的最外层增加配置worker_rlimit_nofile 100000;
要并发,肯定要用到连接池。openresty 的mysql库自带了连接池API。
local pool_max_idle_time = 20000 --ms
local pool_size = 200--connections
local ok, err = db:set_keepalive(pool_max_idle_time, pool_size)
设置连接池的数量为200,20秒后没有连接则释放此连接。
这时做并发测试,还是会报错,说mysql 连接数超出,无法连接。
要去修改mysql的配置,默认连接数为100。
修改路径为/etc/mysql/my.cnf
修改max_connections 字段
最后再次测试,发现还是报错,报错内容为lua tcp read timeout ,conn't connect mysql 。
经排查是写lua 的时候,new mysql后,有个 db:set_timeout(1000),之前设置位1秒,因为是虚拟机,磁盘IO比较慢,并发处理
数据会慢一些,导致超时,将这个时间改大一些就好了。