Hello!
2013/9/16 谭俊东:
>
> 一个请求会查5次redis库,平均单台nginx的qps在700左右,线上遇到redis连接数一直都爆满,
“Redis 连接数爆满”是多满?你是如何检查的,检查的具体结果是?
> 设置了2w的请求,也是爆满,
什么叫做“设置了2w的请求”?不好意思,我看不懂这种说法。
> nginx出现如下错误
> 413130677 upstream timed out (110: Connection timed out) while reading
> response header from upstream, client:
>
单从这个错误看,是你的 redis 服务器过忙而来不及处理请求;换句话说,你的 redis
服务器本身是瓶颈。你需要使用相关的系统工具加以确认,比如使用 ngx-recv-queue 工具:
https://github.com/agentzh/nginx-systemtap-toolkit#ngx-recv-queue
> 是否采用如上这种配置,nginx与后端redis的链接不是使用长连接方式?
>
设置了 keepalive 配置指令便会使用 TCP 连接池。你总是可以通过 netstat
这样的系统工具来确认连接池是否生效(比如检查指向 redis 的 TIME_WAIT 和 ESTABLISHED 状态的连接)。
另外,TCP 连接池的容量不宜设置过大。你应当根据你线上实际的并发度和你配置的 nginx worker 进程的数目进行设置。
另外,推荐换用 lua-resty-redis 库:
https://github.com/agentzh/lua-resty-redis
这样你的配置可以大大减化,同时可以避免 nginx 子请求的开销,同时你也可以设置连接在连接池中的最大空闲时间,以避免过剩的 redis 长连接永不关闭。
Regards,
-agentzh