Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1899964
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 服务器与存储

2014-02-20 15:07:39

    使用gdb调试跟踪nginx的方法与跟踪普通的方法不同。调试的方法是
1.开启nginx,此时nginx的进程已经处于后台运行。
2. gdb -p +worker进程的pid 可以调试worker进程,当然也可以利用这种方法调试他的父进程,但是父进程并没有真正的处理实际的业务。
3. 为这个进程设置断点。
可以发现,nginx的master进程阻塞在sigsuspend 信号上,估计是为了平滑升级的时候使用。


当调试worker进程的时候,设一个端点,发现当没有请求的时候,此时worker进程处于epoll_wait状态,这个跟HAproxy一样,程序阻塞在那里。
可以看出ngx_worker_process_cycle是worker进程处理的核心函数。

ngx_process_events_and_timers 在处理完请求之后,会调用ngx_event_expire_timers() 函数,并找到定时器中的最小的时间,并观察是否这个时间已经超过了当前时间,也就是定时器是否过期,如果过期,那么将这个事件删除,并调用过期时该event的回调函数handler。
ngx_http_keepalive_handler 这个handler函数,会判断这个请求是否过期,如果过期,那么直接关闭这个连接。

点击(此处)折叠或打开

  1. if (rev->timedout || c->close) {
  2.         ngx_http_close_connection(c);
  3.         return;
  4.     }
当调试的时候出现:value optimized out,有些变量gdb调试看不到,可以通过在objs的目录下的Makefile更改成-O0,然后重新编译即可。

阅读(5479) | 评论(2) | 转发(3) |
给主人留下些什么吧!~~

jishipu2014-02-23 22:25:39

http://www.j135.com/?p=232  字符串匹配的KMP算法 通俗讲解,一看就懂

norlan2014-02-21 13:30:38

文明上网,理性发言...