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


    在开发过程中,我们经常会碰到段错误等异常,这时我们需要有相应的机制来进行调试,特别是服务提供在线上时,面对大量的日志信息,合理的调试处理机制对于开发来说是一件非常重要的事情,幸好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

     

  • 相关阅读:
    stack2
    xctf 实时数据监测
    note-service2
    stack pivot学习
    sctf_2019_easy_heap 利用off-by-null构造出double free来向任一地址写入(经典)
    ciscn_2019_s_1 unlink或者of-by-null
    starctf_2019_babyshell 绕过循环检测注入shellcode
    sublime 安装package control
    windows上安装nodejs,升级npm,安装webpack指南
    mysql 常见语句
  • 原文地址:https://www.cnblogs.com/chenpingzhao/p/5563658.html
Copyright © 2020-2023  润新知