hi
我们这边在做接口的异步化,目前已经上线一台,在观察统计日志的时候,发现不同请求打印的日志信息出现数据互串的情况。
这边的业务逻辑比较多,所以采用多个module,拆分业务逻辑放到多个文件中。
nginx中的配置采用指令content_by_lua_file "index.lua"
整个请求生命周期中需要保存一些数据,方便在请求结束前打印统计日志或者给其他逻辑使用。所以这边采用了ngx.ctx作为单个请求生命周期的data存储表。
但是在开启lua_code_cache后,高并发的情况下,不同请求下打印的日志会数据互串。(这个请求打印的统计日志是另外一个请求的数据)
ps 现在发现的现象是我们的业务逻辑有很多网络io操作,这些都采用cosocket。在发送之前打印的ctx.xx值跟发起之后打印的ctx.xx完全不一样
在module里面使用ctx样例如下
local ctx=ngx.ctx
module(...)
function xxx () {
ctx.xxx = val1
network io
print(ctx.xxx) 这个打印出来的是其他请求的数据
}
这个如何解决呢?或者有什么好的方案吗?
还有个问题是发现nginx猛吃内存,达到10GB,这边也使用了share_dict,才150mb。其余逻辑都是网络io操作,没有全局变量都是Lcoal var和module function调用
使用的版本是nginx 1.4.2和ngx_lua 0.9.0