在网上搜索相关的主题, 看到春哥的文章,所以毫不犹豫的转了过来:(Topic Link)
- 尝试最新的 OpenResty 1.5.12.1 正式版发布:http://openresty.org/#Download
- 在构造 OpenResty 时,启用其 ./configure 脚本的 --with-debug 选项,此时会开启 LuaJIT
的断言检查和 API 检查。 - 配置 nginx 生成 core dump 文件(见文档
http://wiki.nginx.org/Debugging#Core_dump ),这样你可以在 nginx worker 崩溃时得到
core dump 文件。然后你可以使用 gdb 对此 core dump 进行分析,比如使用 bt full 命令得到崩溃位置上完整的 C
调用栈轨迹。也可以使用我们的 nginx gdb utils 项目中的工具从 core dump
得到更多的信息:https://github.com/openresty/nginx-gdb-utils#readme 特别是其中的
lbt、lgc、lgcstat、lvmst 这些gdb 扩展命令。
- 检查你使用的 OpenResty 以外的 Lua C 模块或者使用 LuaJIT FFI 的 Lua 模块(即 Lua
库),以及是否使用了 OpenResty 以外的 NGINX C 模块。这些我们未测试过的 Lua 库或者 NGINX
模块可能会引入我们无法控制的内存问题。
- 尝试使用 Valgrind memcheck 工具运行你的 nginx
应用,检查是否有内存问题。在此运行模式下,建议使用下面的命令构造 OpenResty:
./configure --with-debug --with-no-pool-patch \
--with-luajit-xcflags='-DLUAJIT_USE_SYSMALLOC -DLUAJIT_USE_VALGRIND'
然后在 valgrind 运行模式下,在 nginx.conf 中作如下配置:
worker_processes 1;
daemon off;
master_process off;
在用 valgrind 启动 nginx 以后,再用你的测试请求不断访问 nginx,直到 valgrind 产生错误报告。
OpenResty 1.4.3.6 中携带的 ngx_lua 版本是 0.9.2,难道你自己手工覆盖了里了
ngx_lua?一般不建议这么做,因为 OpenResty 的每一个版本里的所有组件一般都是作为整体来测试的。
Regards,
-agentzh