Hello!
2014-10-17 1:16 GMT-07:00 zetao.wei:
> 目前我在用ngx_lua + resty.mysql 封装了数据库访问,并set_keepalive(10000, 200)了
> 但我测试与Mysql数据库的tcp连接都没有进入到pool
> netstat查看连接已经进入了TIME_WAIT状态,说明是主动关闭了;
>
你需要检查
1. set_keepalive() 调用是否返回错误,即
local ok, err = db:set_keepalive()
if not ok then
ngx.log(ngx.ERR, "failed to put mysql conn into pool: ", err)
return
end
2. 检查你使用 resty.mysql 对象的所有未出错的 Lua 代码路径上是否最后都调用了 set_keepalive() 进行收尾。
3. 检查你的 mysqld 服务器一侧是否有特别的配置会导致 MySQL 连接被很快关闭。
另外,如果以上都检查无误,可以启用 nginx 的调试日志,即使用 ./configure --with-debug 重新构造 OpenResty,然后使用
error_log logs/error.log debug;
这一行配置,然后检查 nginx 错误日志里给出的详细信息。(启用调试日志会引入极大的开销,不建议用在生产环境。)
另外,set_keepalive() 中设置的连接池的容量上限是每 nginx worker 进程的,所以不宜设得过大,特别是当你配置了多个
worker 进程的时候。毕竟单个 mysql 服务器处理 500 个连接以上就会变得很吃力了,最高也不能处理 1024 个以上的连接数。
> 版本:ngx_openresty-1.5.12.1
>
这是近半年前的老版本,到现在已累积了很多很多的 bug 修复。建议升级到最新的正式版发布。
Regards,
-agentzh