Debugging NGINX
这篇文章来自nginx document https://docs.nginx.com/nginx/admin-guide/monitoring/debugging/ nginx的故障排除和大多数程序一样, 可以通过gdb调试二进制文件, 增加debug日志,或者分析coredump文件方式解决。 配置nginx nginx 商业版本从Release8开始已经提供nginx-debug版本,使用这个版本直接在配置文件中将日志设置成debug级别即可。 error_log /var/log/nginx/error.log debug; 如果是开源版本, 需要增加**--with-debug**标识重新编译, 步骤如下 $nginx -V 2>&1 | grep arguments $./congfigure --with-debug <other configure arguments> $sudo make $sudo make install 调试符号 和大多数调试都需要增加调试符号,他可以提供除了内存地址以外的其他信息, 将可执行文件中的内存地址和如变量名称, 函数,类,数据结构,源码行数这些代码中的信息关联起来。 编译通过增加**-g**可以包含调试符号。 $ ./configure --with-debug --with-cc-opt='-O0 -g' Debug日志 当二进制支持debug日志后,还需要在配置文件中配置日志路径。日志可以存放到内存中, 标准输出中,或者指定的文件中。默认配置可以看到通过error_log变量指定到文件中。 $ cat /etc/nginx/nginx.conf $ error_log /var/log/nginx/error.log debug; 内存方式 配置 error_log memory:32m debug; 调试 $sudo gdb -p <pid> 将调试脚本拷贝到gdb中,按回车日志就会输出到 debug_log.txt文件中 set $log = ngx_cycle->log while $log->writer != ngx_log_memory_writer set $log = $log->next end set $buf = (ngx_log_memory_buf_t *) $log->wdata dump binary memory debug_log.txt $buf->start $buf_end 按CTRL+D 退出gdb可以查看日志内容。 ...