nginx 调试

本文深入探讨了NGX Worker Process Cycle的工作机制,包括ngx_process_events_and_timers函数的作用,以及如何通过该函数处理事件。文章还详细解释了多进程调试的重要性,并提供了在NGX环境下进行调试的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.多进程的调试 :

    一个进程的处理(还是比不上调试一遍)

    同时对日志的处理think

2.ngx_worker_process_cycle中处理

{

for ( ;; )

{  //不停的循环

ngx_process_events_and_timers(cycle); //最重要的


}

}



在ngx_process_events_and_timers中最重要的

{

ngx_process_events 


ngx_event_process_posted

{

  ngx_event_t  *ev;

  for ;;

{

ev = (ngx_event_t *) *posted;

        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                      "posted event %p", ev);

        printf("Get after ngx_event_process_posted!...");
        if (ev == NULL) {
            return;
        }

        ngx_delete_posted_event(ev);

        ev->handler(ev);

}

}

}

直接epoll pocess

{

epoll_wait  //直接到有响应


对每个事件进行循环 :

        c = event_list[i].data.ptr;

        instance = (uintptr_t) c & 1;
        c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1);

        rev = c->read;

。。。

      rev->handler(rev);  //这个就是    ngx_http_wait_request_handler

                                                                 {   c->data = ngx_http_create_request(c);

                                                                   rev->handler = ngx_http_process_request_line;
                                                                  ngx_http_process_request_line(rev);

                                                                 }

  wev = c->write;  //ngx_http_empty_handler

}



    rev->handler(rev);   这个事件在这时就是 ngx_event_accept
不同的事件对应不同的处理函数

当有新连接时 ngx_event_accept

{

ngx_listening_t   *ls;


}




在epoll中 ngx_connection_t  *c;

c = event_list[i].data.ptr;


在ngx_epoll_add_event 中向  .ptr中赋值   //一般都是通过handler赋值

ngx_event_accept{

ngx_http_init_connection

{

ngx_handle_read_event

{

ngx_epoll_add_event

}



多进程和状态机明白了这和前面的多线程有什么关系呢?


NGX_THREADS  关于ngx线程的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值