openresty 并发处理mysql的一些配置,openrestymysql


因为是自己调试着玩,系统环境比较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比较慢,并发处理

数据会慢一些,导致超时,将这个时间改大一些就好了。


相关内容

    暂无相关文章