zoukankan      html  css  js  c++  java
  • Nginx惊群问题

    Nginx惊群问题

    “惊群”概念

    所谓惊群,可以用一个简单的比喻来说明:
    	一群等待食物的鸽子,当饲养员扔下一粒谷物时,所有鸽子都会去争抢,但只有少数的鸽子能够抢到食物,
    大部分鸽子都是落空的,只能等待饲养员下一次的喂食。
    	对于Nginx Web Server,就是多个进程都在等待
    接受TCP连接请求,一旦TCP连接请求到来,只有一个或者少部分(多个TCP连接请求)进程能够获取连接成
    功,而大部分进程在被操作系统唤醒后,获取连接失败,只能再次进入等待。
    

    “惊群”处理

    下面采用伪代码描述Nginx在Linux系统下对于“惊群”问题的处理
    
    while (true) {
    	if (multi-processes) {
    		/*
    		 *	尝试获取进程共享锁,不管是否成功,都立即返回。
    		 *	如果获取成功,则通过epoll_ctl系统调用把连接等待fd添加到当前进程的epoll监听列表中;
    		 *	如果获取失败,则通过epoll_ctl系统调用把连接等待fd从当前进程的epoll监听列表中移除。
    		 */
    		if (trylock(进程共享锁)) {
    			falg |= 接受TCP连接请求;
    		}
    
    		//调整epoll超时等待时间
    		//...
    	}
    
    	/*
    	 *	epoll系统调用:
    	 *	1.获取TCP连接请求fd,加入TCP连接请求队列;
    	 *	2.获取TCP数据接收,发送请求fd,加入数据处理队列。
    	 */	
    	process_epoll_event();
    
    	if (新的TCP连接请求) {
    		对TCP连接等待fd多次执行接受TCP连接请求处理(accept or accept4);
    	}
    
    	if (进程共享锁) { 
    		释放进程共享锁;
    	}
    
    	//处理数据接收,发送请求队列
    	//...
    }
  • 相关阅读:
    R语言实现人工神经网络预测实例
    Hive 元数据表结构详解
    距离判别法与R程序实战
    Map端数据倾斜
    cdh5.5.6的hue下用ssh方式运行sqoop
    YARN中内存的设置
    hue同时执行多个任务出现org.apache.hadoop.mapred.TaskAttemptListenerImpl
    CDH5.5.6下R、RHive、RJava、RHadoop安装测试
    [转]值得推荐的C/C++框架和库,包含很多开源项目 (真的很强大)
    GPSD
  • 原文地址:https://www.cnblogs.com/WONDERFUL-cnblogs/p/4704606.html
Copyright © 2011-2022 走看看