Hello!
2015-05-29 18:15 GMT+08:00 Fl Hu:
> 在http段使用的access_by_lua_file,这个file是不是被每个worker共享Copy-on-write (COW)
> ,不是每个requrest再重新编译?
>
目前的实现是每个 nginx worker 进程在处理第一个请求时加载对应的 Lua 代码,加载后的结果(即生成的 Lua/LuaJIT
字节码会缓存在 VM 级别,在 worker 进程内部共享),除非你自己配置了 lua_code_cache off。所以每个 worker
都会加载且仅加载一次 .lua 文件。
由于是由 worker 进程加载这些 .lua 文件,所以享受不到 COW. 同时这些 .lua 文件里的语法错误的报告也会推迟到第一个请求处理时。
当然,我有计划改变这个实现,改为在 nginx 加载配置时实际加载 *_by_lua_file 指定的 .lua 文件,这样可以有机会享受到
COW 带来的好处,同时也可以及时抛出 Lua 语法错误等异常。
Regards,
-agentzh