使用redis lua resty, 在用loadrunner做压力测试的时候发现nginx报错: lua socket connect timed out,

222 views
Skip to first unread message

Eric Shan

unread,
Sep 24, 2012, 5:45:10 AM9/24/12
to open...@googlegroups.com

2012/09/24 15:08:13 [error] 4604#0: *1472988 lua socket connect timed out, client: 172.16.8.10, server: dbtest1, request: "GET /test1 HTTP/1.1", host: "192.168.13.63"

redis使用的sample代码的set/get部分,新建连接后尝试red:set_keepalive(0, 100)或者red:close(),两种情况下均会出现上述报错。

nginx使用的tengine 1.3.0,  luagit是最新版本(stable版本不支持64bit?). 连接数在大约4000左右就达到了瓶颈, 3000左右就开始出现大量的socket connect time out错误。所有请求都返回了200.


content_by_lua '

            local redis = require "resty.redis"

            local red = redis:new()

            

            red:set_timeout(1000) -- 1 sec

            

            -- or connect to a unix domain socket file listened

            -- by a redis server:

            --     local ok, err = red:connect("unix:/path/to/redis.sock")

            

            local ok, err = red:connect("127.0.0.1", 6379)

            if not ok then

                ngx.say("failed to connect: ", err)

                return 

            end         

                    

            ok, err = red:set("dog", "an aniaml")

            if not ok then

                ngx.say("failed to set dog: ", err)

                return

            end


            ngx.say("set result: ", res)


            local res, err = red:get("dog")

            if not res then

                ngx.say("failed to get dog: ", err)

                return

            end


            if res == ngx.null then

                ngx.say("dog not found.")

                return

            end


            ngx.say("dog: ", res)

            

            -- or just close the connection right away:

            local ok, err = red:close()

            if not ok then

                ngx.say("failed to close: ", err)

                return 

            end

            

        ';



agentzh

unread,
Sep 24, 2012, 1:34:29 PM9/24/12
to open...@googlegroups.com
Hello!

On Mon, Sep 24, 2012 at 2:45 AM, Eric Shan <shan...@gmail.com> wrote:
> 2012/09/24 15:08:13 [error] 4604#0: *1472988 lua socket connect timed out,
> client: 172.16.8.10, server: dbtest1, request: "GET /test1 HTTP/1.1", host:
> "192.168.13.63"
>
> redis使用的sample代码的set/get部分,新建连接后尝试red:set_keepalive(0,
> 100)或者red:close(),两种情况下均会出现上述报错。
>
> nginx使用的tengine 1.3.0, luagit是最新版本(stable版本不支持64bit?).

推荐使用最新的 LuaJIT 2.0 beta10. 许多人(包括我们,CloudFlare)都在生产上使用很久了。

> 连接数在大约4000左右就达到了瓶颈,
> 3000左右就开始出现大量的socket connect time out错误。所有请求都返回了200.
>

在出现错误时,Nginx 和 Redis 进程的 CPU 使用率分别是怎样的呢?一种常见的情况是 Redis 进程把 CPU 跑满,然后
redis 的 accept() 队列溢出,此时 SYN 包被丢弃,便很容易出现连接超时错误。

Best regards,
-agentzh

Eric Shan

unread,
Oct 7, 2012, 11:37:20 PM10/7/12
to open...@googlegroups.com
多谢回复,我们测试使用的就是最新的 LuaJIT 2.0 beta10
 
nginx和redis是跑在虚拟机上面,我再重新测试一下看看是否redis出现了问题。

在 2012年9月25日星期二UTC+8上午1时34分31秒,agentzh写道:
Reply all
Reply to author
Forward
0 new messages