openresty 并发处理mysql的一些配置

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比较慢,并发处理

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

    A+
发布日期:2017年12月27日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: