Hello!
2012/10/9 依云:
> 我发现在 Lua 代码中反复访问 ngx.var 中的变量会导致进程的内存使用上升,直
> 到请求完毕才会释放。这限制了在请求完成后还在后台处理数据的应用。
>
ngx.var.VARIABLE 调用的是 nginx 的 C API 函数 ngx_http_get_variable 来读取 nginx
变量的,而这个 C API 几乎总是会在与请求绑定的 nginx 内存池中分配空间。而每请求的 nginx 内存池只会在请求结束时统一释放。
所以一个建议是,如果 ngx.var.VARIABLE 需要在 Lua 脚本中进行反复读取,请自己使用 Lua
变量进行缓冲,以避免请求生命期内的内存泄漏,例如:
local foo = ngx.var.foo
more_processing(foo)
而不要在(假想的)你的 more_processing() 函数中反复调用 ngx.var.foo.
这个处理原则也适用于其他的 Nginx Lua API.
Best regards,
-agentzh