IT技术博客大学习 共学习 共进步

深入理解Nginx之调试优化技巧

记录&分享 2010-12-21 01:57:16 浏览 8,103 次

在开发过程中,我们经常会碰到段错误等异常,这时我们需要有相应的机制来进行调试,特别是服务提供在线上时,面对大量的日志信息,合理的调试处理机制对于开发来说是一件非常重要的事情,幸好Nginx本身提供了很好的调试机制,主要包括以下几个方面。

1、Core文件

默认情况下,编译Nginx是带上-g选项的,这就意味着我们可以使用gdb进行调试,以跟踪具体的错误原因。使用Nginx自身带有的两个配置选择就可以轻松配置,使它在Crash的时候产生Core文件。

worker_rlimit_core  50M;
working_directory   /tmp/;

其中worker_rlimit_core表示单个worker子进程所使用的Core文件大小的最大值。

working_directory表示Core文件存放的目录,这里需要注意的一点是:该目录nginx必须具有写权限,属主最好为Nginx的进程所有者。

当Nginx接收到信号结束处理时,就会产生相应的Core文件,我们就可以使用gdb来跟踪查看具体的错误原因,如下:

gdb /usr/local/nginx/sbin/nginx /tmp/core.xxx

>>bt

2、调试模式

为了收集运行过程中的更多的信息,我们可以开启调试模式运行Nginx,这在线上环境上收集具体的信息非常有用,我们只需要更新Nginx的配置文件,并重新加载,所有调试都会记录在日志当中。在编译Nginx时加上-with-debug选项,并在配置文件中可以进行相应的配置以查看调用日志。如下,在error_log中带有debug选项,就会将相应的调试日志记录下来:

error_log  /usr/local/nginx/logs/error.log  debug;

http
{
server
{
error_log  /usr/local/nginx/logs/error.log  debug;
….

因为日志占用的空间非常大,为了更加便于收集日志,Nginx还提供了一个配置选项用来设置只记录特定连接的调试信息,这个配置选项为debug_connection。比如我们只对来自192.168.1.1的连接进行调试信息的记录,配置如下:

events
{
debug_connection   192.168.1.1;
}

这时我们可以通过tail -f /usr/local/nginx/logs/error.log -n 100|grep debug来进行日志过滤,查看相应的具体调试信息。

3、单进程非守护模式

Nginx有两种进程模型可以选用,为单进程和多进程两种,同时,默认情况下使用的是多进程模型,同时,默认情况下,Nginx以守护进程的方式运行,但为了方便开发和调试,Nginx提供了单进程模型和非守护进程的方式,由两个配置选项来控制:

守护进程:

daemon
Syntax: daemon on | off
Default: on

多进程模型配置:
master_process
Syntax: master_process on | off
Default: on

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (阅读 106,824)
  2. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (阅读 33,761)
  3. 解析nginx负载均衡 (阅读 16,422)
  4. Oracle MTS模式下 进程地址与会话信息 (阅读 14,185)
  5. Linux内存点滴 用户进程内存空间 (阅读 12,944)
  6. Nginx模块开发入门 (阅读 11,040)
  7. 检查nginx配置,重载配置以及重启的方法 (阅读 10,682)
  8. Cacti 添加 Nginx 监控 (阅读 10,361)
  9. Nginx+FastCgi+Php 的工作机制 (阅读 10,083)
  10. 奇怪的 Nginx 的 upstream timed out 引起响应 502 (阅读 9,823)