Re: [openresty] Post时,read_body不时的报错

55 views
Skip to first unread message

agentzh

unread,
Dec 22, 2012, 1:54:36 AM12/22/12
to open...@googlegroups.com
Hello!

2012/12/16 laowang:
> 一个接收post数据的脚本,最初是用php写了,从来没有报错过,现在出于性能的考虑,改成了ngx lua,多数时候都正常,但有时候会报错:
>
> 2012/12/17 14:47:07 [error] 10098#0: *922796 lua entry thread aborted:
> runtime error: ...r/xxx.lua:144: failed to read request body
> stack traceback:
> coroutine 0:
> [C]: in function 'read_body'
> ...r/xxx.lua:144: in function <...r/xxx.lua:1>, client: 112.96.30.55,
> server: openbox.mobilem.360.cn, request: "POST /mintf/xxx HTTP/1.1", host:
> "openbox.mobilem.360.cn"
>

这个错误是 Nginx 核心抛出的(特别地,是 ngx_http_read_client_request_body 函数返回了
500),如果 Nginx 核心没有打印更详细的错误消息,则可能的情况有:

1. 发送 HTTP/1.1 100 Continue 响应失败(由于客户端连接出错或者你的系统发送缓冲区溢出等原因),
2. (暂时性的)内存分配失败。

如果你使用 nginx + php,则对于这两种错误,你都不会在错误日志中得到错误消息,而只是在客户端一侧直接得到 500
错误页。所以你在使用 php 时没看到报错,并不代表在 nginx 一侧没有这种错误发生 :)

如果你得到此错误的频率很低,建议直接忽略之。

如果你得到此错误的频率较高,则有必要确认具体导致你那条错误的原因,有两种选择:

1. 启用 nginx 的调试日志;
2. 使用 systemtap 或者 dtrace 这样的工具进行动态追踪。

第 1 种做法简单易行,但是会对你服务的性能产生较大影响;第 2 种方法推荐在生产环境使用。

Best regards,
-agentzh

Reply all
Reply to author
Forward
0 new messages