openresty 如何调试

在网上搜索相关的主题, 看到春哥的文章,所以毫不犹豫的转了过来:(Topic Link)

  1. 尝试最新的 OpenResty 1.5.12.1 正式版发布:http://openresty.org/#Download
  2. 在构造 OpenResty 时,启用其 ./configure 脚本的 --with-debug 选项,此时会开启 LuaJIT
    的断言检查和 API 检查。
  3. 配置 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 扩展命令。

  1. 检查你使用的 OpenResty 以外的 Lua C 模块或者使用 LuaJIT FFI 的 Lua 模块(即 Lua
    库),以及是否使用了 OpenResty 以外的 NGINX C 模块。这些我们未测试过的 Lua 库或者 NGINX

模块可能会引入我们无法控制的内存问题。

  1. 尝试使用 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

添加新评论