OpenResty

lua_code_cache 开启或关闭缓存

luobo · 2月29日 · 2020年 ·

代码介绍

这个参数对lua的调试开发非常重要,作用是关闭或者开启lua的代码缓存,如果你再开发的时候需要实时看到代码变化后的效果,就关闭lua_code_cache即可。

语法默认状态作用域
lua_code_cache on | offlua_code_cache onhttp, server, location, location if

lua_code_cache 是默认开启状态的,做调试的时候可以设置为lua_code_cache off即可关闭缓存。

从0.9.3版本开始,lua_code_cache关闭时,ngx_lua服务的每个请求都将在单独的Lua VM实例中运行。因此,不会缓存set_by_lua_filecontent_by_lua_fileaccess_by_lua_file等中引用的Lua文件,并且将重新使用所有使用的Lua模块。有了这个,开发人员可以采用编辑和刷新方法。

但是请注意,在nginx.conf中内联编写的Lua代码(例如set_by_lua,content_by_luaaccess_by_luarewrite_by_lua指定的代码)在您编辑nginx.conf文件中的内联Lua代码时将不会更新,因为只有Nginx配置文件解析器可以正确解析nginx.conf文件,唯一的方法是通过发送HUP信号来重新加载配置文件,或者只是重新启动Nginx。

即使启用了代码缓存,也无法缓存由dofile或*_by_lua_file中的loadfile加载的Lua文件(除非您自己缓存结果)。通常,您可以使用init_by_luainit_by_lua_file指令加载所有此类文件,也可以仅使这些Lua文件成为真正的Lua模块并通过require加载它们。

gx_lua模块不支持Apache mod_lua模块可用的统计模式(尚未)。

强烈建议禁用Lua代码缓存以供生产使用,并且仅在开发期间使用,因为它会对整体性能产生重大负面影响。例如,在禁用Lua代码缓存后,“ hello world” Lua示例的性能可能下降一个数量级。

0 条回应