关闭

Nginx学习之十四-GDB调试Nginx初试

本文的测试环境: Win7+虚拟机VMWareVMware-workstation-full-7.1.4-385536+Ubuntu12.04 Nginx-1.4.0 要想有效的研究Nginx源码,必须要动手调试,GDB就是有用的利器。下面简要介绍用GDB调试Nginx的一个小例子。 本文完成了这样的工作:跟踪worker子进程,观察worker子进程阻塞在何处。然后利用w...
阅读(10866) 评论(1)

【C++】由指针常量和常量指针引发的问题

今天在写一个C++程序的时候,要用到STL的set容器,而且我想让它利用自定义的排序准则来实现自动排序。而且set中元素类型是指向自定义的结构体的指针。结果运行总是出错。 下面先贴出起初的代码: #include #include using namespace std; typedef struct test_t{ int a; int b; }test; class...
阅读(3051) 评论(1)

Nginx学习之十三-负载均衡-IP哈希策略剖析

前面介绍过nginx负载均衡的加权轮询策略(http://blog.csdn.net/xiajun07061225/article/details/9318871),它是Nginx负载均衡的基础策略,所以一些初始化工作,比如配置值转储,其他策略可以直接复用他。在后面的初始化的代码中将可以看到。 IP哈希初始化 IP哈希的初始化函数ngx_http_upstream_init_i...
阅读(17959) 评论(3)

Nginx学习之十二-负载均衡-加权轮询策略剖析

本问介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更多机会获取到监听套接口,从而客户端的请求到达后也就相应地被它捕获并处理)。如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适...
阅读(29625) 评论(5)

Nginx学习之十一-Nginx启动框架处理流程

Nginx启动过程流程图 下面首先给出Nginx启动过程的流程图: ngx_cycle_t结构体 Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)...
阅读(12473) 评论(0)

Nginx学习之十-超时管理(定时器事件)

Nginx事件管理主要是网络事件和定时器事件。下面介绍定时器事件管理,即超时管理。 为什么要进行超时管理 Nginx有必要对可能发生超时的事件进行统一管理,并在事件超时时作出相应的处理,比如回收资源,返回错误等。举例来说,当客户端对nginx发出请求连接后,nginx机会accept()并建立对应的连接对象、读取额护短请求的头部信息。而读取这个头部信息显然是要在一定的时间内...
阅读(9695) 评论(4)

Nginx学习之九-负载均衡(客户端请求与Nginx进程间负载均衡)

负载均衡问题的产生 在nginx中,建立连接的时候,会设计负载均衡问题。在多个子进程争抢处理一个新连接事件时,一定只有一个worker子进程最终会成功建立连接,随后它会一直处理这个连接直到连接关闭。那么,就有可能出现这样的情况:有的子进程建立并处理了大部分连接,而有的子进程只处理了少量连接。这对多核CPU架构下的应用是很不利的。因为子进程之间应该是平等的,每个子进程应该尽量独占一个CPU...
阅读(5451) 评论(1)

Nginx学习之八-惊群问题

惊群问题(thundering herd)的产生 在建立连接的时候,Nginx处于充分发挥多核CPU架构性能的考虑,使用了多个worker子进程监听相同端口的设计,这样多个子进程在accept建立新连接时会有争抢,这会带来著名的“惊群”问题,子进程数量越多越明显,这会造成系统性能的下降。 一般情况下,有多少CPU核心就有配置多少个worker子进程。假设现在没有用户连入服务器,...
阅读(8782) 评论(4)

【Linux学习】epoll详解

什么是epoll epoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。   epoll的相关...
阅读(88501) 评论(16)

Nginx学习之七-模块ngx_epoll_module详解(epoll机制在nginx中的实现)

本文结合实际代码介绍事件驱动模块接口与epoll用法是如何结合起来发挥作用的。Nginx中ngx_epoll_module模块基于epoll实现了Nginx的事件驱动。 模块定义(src/event/ngx_epoll_module.c): ngx_module_t ngx_epoll_module = { NGX_MODULE_V1, &ngx_epoll_modu...
阅读(11376) 评论(2)

笔试面试常考数据结构-单链表常用操作编程实现

单链表是笔试以及面试手写代码中常考的数据结构之一。下面实现了单链表的常见操作:创建单链表、删除节点、打印单链表(包括正向打印以及逆向打印)、反转单链表、找出单链表的倒数第K个节点、合并两个有序单链表等操作。 代码(C++): //笔试面试单链表常用操作编程实现 #include #include #include using namespace std; //单链表节点数据结...
阅读(7366) 评论(4)

Nginx学习之六-nginx核心进程模型

一、Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程。 一个较为完整的整体框架结构如图所示: 二、核心进程模型 启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程。 nginx也可以...
阅读(12872) 评论(6)

Nginx学习之五-nginx基础架构设计

一、优秀的模块化设计 (1)高度抽象的模块接口 所有的模块都遵循着同样的ngx_module_t接口设计规范。 (2)模块接口简单,灵活性高 模块的基本接口ngx_module_t足够简单,只涉及模块的初始化、退出以及对配置项的处理,这同时带来了足够的灵活性,是的nginx比较简单的实现了动态可修改性,也就是保持服务正常运行下使得系统功能发生改变。 102 struct ng...
阅读(7083) 评论(0)

Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock)

自旋锁简介 Nginx框架使用了三种消息传递方式:共享内存、套接字、信号。 Nginx主要使用了三种同步方式:原子操作、信号量、文件锁。 基于原子操作,nginx实现了一个自旋锁。自旋锁是一种非睡眠锁。如果某进程视图获得自旋锁,当发现锁已经被其他进程获得时,那么不会使得当前进程进入睡眠状态,而是始终保持进程在可执行状态,每当内核调度到这个进程执行时就持续检查是否可以获取到所锁。...
阅读(6291) 评论(0)
    个人资料
    • 访问:1642924次
    • 积分:13770
    • 等级:
    • 排名:第867名
    • 原创:122篇
    • 转载:15篇
    • 译文:6篇
    • 评论:923条
    博客专栏
    公告
    博客已迁移至:http://xiajunhust.github.io/