锘??xml version="1.0" encoding="utf-8" standalone="yes"?>一本一本久久A久久综合精品,国产欧美久久久精品,国产精品久久久天天影视香蕉http://www.shnenglu.com/tankzhouqiang/category/16721.htmlzh-cnMon, 11 Jul 2011 14:16:25 GMTMon, 11 Jul 2011 14:16:25 GMT60Nginx婧愮爜鍒嗘瀽-Epoll妯″潡(杞澆)http://www.shnenglu.com/tankzhouqiang/archive/2011/07/10/150564.html鍛ㄥ己鍛ㄥ己Sat, 09 Jul 2011 16:54:00 GMThttp://www.shnenglu.com/tankzhouqiang/archive/2011/07/10/150564.htmlhttp://www.shnenglu.com/tankzhouqiang/comments/150564.htmlhttp://www.shnenglu.com/tankzhouqiang/archive/2011/07/10/150564.html#Feedback0http://www.shnenglu.com/tankzhouqiang/comments/commentRss/150564.htmlhttp://www.shnenglu.com/tankzhouqiang/services/trackbacks/150564.htmlhttp://www.tbdata.org/archives/1296


Nginx婧愮爜鍒嗘瀽-Epoll妯″潡

3 comments 鍗佷簩鏈?26th, 2010 | by yixiao in 楂樻ц兘鏈嶅姟鍣?/a>

Linux騫沖彴涓婏紝Nginx浣跨敤epoll瀹屾垚浜嬩歡椹卞姩錛屽疄鐜伴珮騫跺彂錛涙湰鏂囧皢涓嶅epoll鏈韓榪涜浠嬬粛錛堢綉涓婁竴鍫嗕竴鍫嗙殑鏂囩珷浠嬬粛epoll鐨勫師鐞嗗強(qiáng)浣跨敤鏂規(guī)硶錛岀敋鑷蟲(chóng)簮鐮佸垎鏋愮瓑錛夛紝浠呯湅涓涓婲ginx鏄浣曚嬌鐢╡poll鐨勩?/p>

Nginx鍦╡poll妯″潡涓畾涔変簡(jiǎn)濂藉嚑涓嚱鏁幫紝榪欎簺鍑芥暟鍩烘湰閮芥槸浣滀負(fù)鍥炶皟娉ㄥ唽鍒頒簨浠舵娊璞″眰鐨勫搴旀帴鍙d笂錛屼粠鑰屽疄鐜頒簡(jiǎn)浜嬩歡椹卞姩鐨勫叿浣撳寲錛屾垜浠湅濡備笅鐨勪竴孌典唬鐮侊細(xì)

ngx_event_module_t  ngx_epoll_module_ctx = {
    &epoll_name,
    ngx_epoll_create_conf,               /* create configuration */
    ngx_epoll_init_conf,                 /* init configuration */
    {
        ngx_epoll_add_event,             /* add an event */
        ngx_epoll_del_event,             /* delete an event */
        ngx_epoll_add_event,             /* enable an event */
        ngx_epoll_del_event,             /* disable an event */
        ngx_epoll_add_connection,        /* add an connection */
        ngx_epoll_del_connection,        /* delete an connection */
        NULL,                            /* process the changes */
        ngx_epoll_process_events,        /* process the events */
        ngx_epoll_init,                  /* init the events */
        ngx_epoll_done,                  /* done the events */
    }
};


榪欐浠g爜灝辨槸epoll鐨勭浉鍏沖嚱鏁版敞鍐屽埌浜嬩歡鎶借薄灞傦紝榪欓噷鎵璋撶殑浜嬩歡鎶借薄灞傚湪鍓嶉潰鐨勫崥鏂囦腑鏈夋彁榪囷紝灝辨槸Nginx涓轟簡(jiǎn)鏂逛究鏀寔鍜屽紑鍙戝叿浣撶殑I/O妯″瀷錛屼粠鑰屽疄鐜扮殑涓灞傛娊璞°備唬鐮佸悗闈㈢殑娉ㄩ噴灝嗗姛鑳借鏄庡緱寰堣緇嗕簡(jiǎn)錛屾湰鏂囧氨鍙噸鐐瑰叧娉╪gx_epoll_init鍜宯gx_epoll_process_events涓や釜鍑芥暟錛屽叾浠栧嚑涓嚱鏁板氨鏆備笖蹇界暐浜?jiǎn)銆?/p>

ngx_epoll_init涓昏鏄畬鎴恊poll鐨勭浉鍏沖垵濮嬪寲宸ヤ綔錛屼唬鐮佸垎鏋愬涓嬶細(xì)

static ngx_int_t
ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
{
    ngx_epoll_conf_t  *epcf;
	/*鍙栧緱epoll妯″潡鐨勯厤緗粨鏋?/
    epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);
	/*ep鏄痚poll妯″潡瀹氫箟鐨勪竴涓叏灞鍙橀噺錛屽垵濮嬪寲涓?1*/
    if (ep == -1) {
    	/*鍒涗竴涓猠poll瀵硅薄錛屽閲忎負(fù)鎬昏繛鎺ユ暟鐨勪竴鍗?/
        ep = epoll_create(cycle->connection_n / 2);
        if (ep == -1) {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                          "epoll_create() failed");
            return NGX_ERROR;
        }
    }
	/*nevents涔熸槸epoll妯″潡瀹氫箟鐨勪竴涓叏灞鍙橀噺錛屽垵濮嬪寲涓?*/
    if (nevents events) {
        if (event_list) {
            ngx_free(event_list);
        }

		/*event_list瀛樺偍浜х敓浜嬩歡鐨勬暟緇?/
        event_list = ngx_alloc(sizeof(struct epoll_event) * epcf->events,
                               cycle->log);
        if (event_list == NULL) {
            return NGX_ERROR;
        }
    }
    nevents = epcf->events;
	/*鍒濆鍖栧叏灞鍙橀噺ngx_io, ngx_os_is瀹氫箟涓猴細(xì)
		ngx_os_io_t ngx_os_io = {
    		ngx_unix_recv,
    		ngx_readv_chain,
    		ngx_udp_unix_recv,
    		ngx_unix_send,
    		ngx_writev_chain,
    		0
		};錛堜綅浜巗rc/os/unix/ngx_posix_init.c錛?
	*/
    ngx_io = ngx_os_io;
	/*榪欓噷灝辨槸灝唀poll鐨勫叿浣撴帴鍙e嚱鏁版敞鍐屽埌浜嬩歡鎶借薄灞傛帴鍙gx_event_actions涓娿?
	鍏蜂綋鏄笂鏂囨彁鍒扮殑ngx_epoll_module_ctx涓皝瑁呯殑濡備笅鍑犱釜鍑芥暟
        ngx_epoll_add_event,
        ngx_epoll_del_event,
        ngx_epoll_add_event,
        ngx_epoll_del_event,
        ngx_epoll_add_connection,
        ngx_epoll_del_connection,
        ngx_epoll_process_events,
        ngx_epoll_init,
        ngx_epoll_done,
	*/
    ngx_event_actions = ngx_epoll_module_ctx.actions;
#if (NGX_HAVE_CLEAR_EVENT)
	/*epoll灝嗘坊鍔犺繖涓爣蹇?涓昏涓轟簡(jiǎn)瀹炵幇杈圭紭瑙﹀彂*/
    ngx_event_flags = NGX_USE_CLEAR_EVENT
#else
	/*姘村鉤瑙﹀彂*/
    ngx_event_flags = NGX_USE_LEVEL_EVENT
#endif
                      |NGX_USE_GREEDY_EVENT /*io鐨勬椂鍊欙紝鐩村埌EAGAIN涓烘*/
                      |NGX_USE_EPOLL_EVENT; /*epoll鏍囧織*/
    return NGX_OK;
}

epoll鍒濆鍖栧伐浣滄病鏈夋兂璞′腑鐨勫鏉傦紝鍜屾垜浠鉤鏃朵嬌鐢╡poll閮戒竴鏍鳳紝涓嬮潰鐪媙gx_epoll_process_events錛岃繖涓嚱鏁頒富瑕佺敤鏉ュ畬鎴愪簨浠剁殑絳夊緟騫跺鐞嗐?/p>

static ngx_int_t
ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
{
    int                events;
    uint32_t           revents;
    ngx_int_t          instance, i;
    ngx_uint_t         level;
    ngx_err_t          err;
    ngx_log_t         *log;
    ngx_event_t       *rev, *wev, **queue;
    ngx_connection_t  *c;
	/*涓寮濮嬪氨鏄瓑寰呬簨浠訛紝鏈闀跨瓑寰呮椂闂翠負(fù)timer錛沶ginx涓轟簨浠?
	涓撻棬鐢ㄧ孩榛戞爲(wèi)緇存姢浜?jiǎn)涓涓鏃跺櫒銆傚悗緇榪欎釜timer鍗曠嫭鍒嗘瀽銆?
	*/
    events = epoll_wait(ep, event_list, (int) nevents, timer);
    if (events == -1) {
        err = ngx_errno;
    } else {
        err = 0;
    }
    if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
        /*鎵ц涓嬈℃椂闂存洿鏂? nginx灝嗘椂闂寸紦瀛樺埌浜?jiǎn)涓緇勫叏灞鍙橀噺涓紝鏂逛究紼嬪簭楂樻晥鐨勮幏鍙栦簨浠躲?/
        ngx_time_update();
    }
	/*澶勭悊wait閿欒*/
    if (err) {
        if (err == NGX_EINTR) {
            if (ngx_event_timer_alarm) {
                ngx_event_timer_alarm = 0;
                return NGX_OK;
            }
            level = NGX_LOG_INFO;
        } else {
            level = NGX_LOG_ALERT;
        }
        ngx_log_error(level, cycle->log, err, "epoll_wait() failed");
        return NGX_ERROR;
    }
	/*wait榪斿洖浜嬩歡鏁?錛屽彲鑳芥槸timeout榪斿洖錛屼篃鍙兘鏄潪timeout榪斿洖錛涢潪timeout榪斿洖鍒欐槸error*/
    if (events == 0) {
        if (timer != NGX_TIMER_INFINITE) {
            return NGX_OK;
        }
        ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
                      "epoll_wait() returned no events without timeout");
        return NGX_ERROR;
    }
    log = cycle->log;
	/*for寰幆寮濮嬪鐞嗘敹鍒扮殑鎵鏈変簨浠?/
    for (i = 0; i read;
		銆傘傘傘傘傘傘傘傘傘傘傘傘?

		/*鍙栧緱鍙戠敓涓涓簨浠?/
        revents = event_list[i].events;

		/*璁板綍wait鐨勯敊璇繑鍥炵姸鎬?/
        if (revents & (EPOLLERR|EPOLLHUP)) {
            ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
                           "epoll_wait() error on fd:%d ev:%04XD",
                           c->fd, revents);
        }
        if ((revents & (EPOLLERR|EPOLLHUP))
             && (revents & (EPOLLIN|EPOLLOUT)) == 0)
        {
            /*
             * if the error events were returned without EPOLLIN or EPOLLOUT,
             * then add these flags to handle the events at least in one
             * active handler
             */
            revents |= EPOLLIN|EPOLLOUT;
        }
		/*璇ヤ簨浠舵槸涓涓浜嬩歡錛屽茍璇ヨ繛鎺ヤ笂娉ㄥ唽鐨勮浜嬩歡鏄痑ctive鐨?/
        if ((revents & EPOLLIN) && rev->active) {
            if ((flags & NGX_POST_THREAD_EVENTS) && !rev->accept) {
                rev->posted_ready = 1;
            } else {
                rev->ready = 1;
            }

			/*浜嬩歡鏀懼叆鐩稿簲鐨勯槦鍒椾腑錛涘叧浜庢澶勭殑鍏堝叆闃熷啀澶勭悊錛屽湪鍓嶉潰鐨勬枃绔犱腑宸茬粡浠嬬粛榪囦簡(jiǎn)銆?/
            if (flags & NGX_POST_EVENTS) {
                queue = (ngx_event_t **) (rev->accept ?
                               &ngx_posted_accept_events : &ngx_posted_events);
                ngx_locked_post_event(rev, queue); /*鍏ラ槦*/
            } else {
                rev->handler(rev);
            }
        }
        wev = c->write;
		/*鍙戠敓鐨勬槸涓涓啓浜嬩歡錛屽拰璇諱簨浠跺畬鍏ㄤ竴鏍風(fēng)殑閫昏緫榪囩▼*/
        if ((revents & EPOLLOUT) && wev->active) {
            if (flags & NGX_POST_THREAD_EVENTS) {
                wev->posted_ready = 1;
            } else {
                wev->ready = 1;
            }
			/*鍏堝叆闃熷啀澶勭悊*/
            if (flags & NGX_POST_EVENTS) {
                ngx_locked_post_event(wev, &ngx_posted_events);
            } else {
                wev->handler(wev);
            }
        }
    }
    return NGX_OK;
}

鏈枃灝嗗叧娉ㄧ殑涓や釜epoll鍑芥暟涔熷氨榪欎箞涓鐐逛唬鐮佷簡(jiǎn)錛屼絾鏁翠釜epoll榪樻湁娣誨姞浜嬩歡鍜屽垹闄や簨浠剁瓑鐨勭浉鍏沖嚱鏁幫紝浠g爜閮藉緢綆鍗曪紝鏈枃灝變笉鍋氬叿浣撶殑鍒嗘瀽浜?jiǎn)銆?/p>



鍛ㄥ己 2011-07-10 00:54 鍙戣〃璇勮
]]>
Nginx鐨勫唴瀛樻睜瀹炵幇錛堣漿杞斤級(jí)http://www.shnenglu.com/tankzhouqiang/archive/2011/06/15/148718.html鍛ㄥ己鍛ㄥ己Wed, 15 Jun 2011 08:27:00 GMThttp://www.shnenglu.com/tankzhouqiang/archive/2011/06/15/148718.htmlhttp://www.shnenglu.com/tankzhouqiang/comments/148718.htmlhttp://www.shnenglu.com/tankzhouqiang/archive/2011/06/15/148718.html#Feedback0http://www.shnenglu.com/tankzhouqiang/comments/commentRss/148718.htmlhttp://www.shnenglu.com/tankzhouqiang/services/trackbacks/148718.html

鏉ユ簮錛歨ttp://www.tbdata.org/archives/1390#more-1390


Nginx鐨勫唴瀛樻睜瀹炵幇寰楀緢綺懼閥錛屼唬鐮佷篃寰堢畝媧併傛葷殑鏉ヨ錛屾墍鏈夌殑鍐呭瓨姹犲熀鏈兘涓涓畻鏃細(xì)鐢寵澶у潡鍐呭瓨錛岄伩鍏?#8220;緇嗘按闀挎祦”銆?/p>

涓銆佸垱寤轟竴涓唴瀛樻睜

nginx鍐呭瓨姹犱富瑕佹湁涓嬮潰涓や釜緇撴瀯鏉ョ淮鎶わ紝浠栦滑鍒嗗埆緇存姢浜?jiǎn)鍐呭瓨姹犵殑澶撮儴鍜屾暟鎹儴銆傛澶勬暟鎹儴灝辨槸渚涚敤鎴峰垎閰嶅皬鍧楀唴瀛樼殑鍦版柟銆?/p>

//璇ョ粨鏋勭敤鏉ョ淮鎶ゅ唴瀛樻睜鐨勬暟鎹潡錛屼緵鐢ㄦ埛鍒嗛厤涔嬬敤銆?br />typedef struct {
u_char *last; //褰撳墠鍐呭瓨鍒嗛厤緇撴潫浣嶇疆錛屽嵆涓嬩竴孌靛彲鍒嗛厤鍐呭瓨鐨勮搗濮嬩綅緗?br /> u_char *end; //鍐呭瓨姹犵粨鏉熶綅緗?br /> ngx_pool_t *next; //閾炬帴鍒頒笅涓涓唴瀛樻睜
ngx_uint_t failed; //緇熻璇ュ唴瀛樻睜涓嶈兘婊¤凍鍒嗛厤璇鋒眰鐨勬鏁?br />} ngx_pool_data_t;
//璇ョ粨鏋勭淮鎶ゆ暣涓唴瀛樻睜鐨勫ご閮ㄤ俊鎭?br />struct ngx_pool_s {
ngx_pool_data_t d; //鏁版嵁鍧?br /> size_t max; //鏁版嵁鍧楃殑澶у皬錛屽嵆灝忓潡鍐呭瓨鐨勬渶澶у?br /> ngx_pool_t *current; //淇濆瓨褰撳墠鍐呭瓨姹?br /> ngx_chain_t *chain; //鍙互鎸備竴涓猚hain緇撴瀯
ngx_pool_large_t *large; //鍒嗛厤澶у潡鍐呭瓨鐢紝鍗寵秴榪噈ax鐨勫唴瀛樿姹?br /> ngx_pool_cleanup_t *cleanup; //鎸傝澆涓浜涘唴瀛樻睜閲婃斁鐨勬椂鍊欙紝鍚屾椂閲婃斁鐨勮祫婧愩?br /> ngx_log_t *log;
};


鏈変簡(jiǎn)涓婇潰鐨勪袱涓粨鏋勶紝灝卞彲浠ュ垱寤轟竴涓唴瀛樻睜浜?jiǎn)锛宯ginx鐢ㄦ潵鍒涘緩涓涓唴瀛樻睜鐨勬帴鍙f槸錛歯gx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log)錛堜綅浜巗rc/core/ngx_palloc.c涓級(jí);璋冪敤榪欎釜鍑芥暟灝卞彲浠ュ垱寤轟竴涓ぇ灝忎負(fù)size鐨勫唴瀛樻睜浜?jiǎn)銆傝繖閲岋紝鎴戠敤鍐呭瓨姹犵殑緇撴瀯鍥炬潵灞?紺猴紝灝變笉鍋氬叿浣撶殑浠g爜鍒嗘瀽浜?jiǎn)銆?br />
ngx_create_pool鎺ュ彛鍑芥暟灝辨槸鍒嗛厤涓婂浘榪欐牱鐨勪竴澶у潡鍐呭瓨錛岀劧鍚庡垵濮嬪寲濂藉悇涓ご閮ㄥ瓧孌碉紙涓婂浘涓殑褰╄壊閮ㄥ垎錛夈傜孩鑹茶〃紺虹殑鍥涗釜瀛楁灝辨槸鏉ヨ嚜浜庝笂 榪扮殑絎竴涓粨鏋勶紝緇存姢鏁版嵁閮ㄥ垎錛岀敱鍥懼彲鐭ワ細(xì)last鏄敤鎴蜂粠鍐呭瓨姹犲垎閰嶆柊鍐呭瓨鐨勫紑濮嬩綅緗紝end鏄繖鍧楀唴瀛樻睜鐨勭粨鏉熶綅緗紝鎵鏈夊垎閰嶇殑鍐呭瓨閮戒笉鑳借秴榪?end銆傝摑鑹茶〃紺虹殑max瀛楁鐨勫肩瓑浜庢暣涓暟鎹儴鍒嗙殑闀垮害錛岀敤鎴瘋姹傜殑鍐呭瓨澶т簬max鏃訛紝灝辮涓虹敤鎴瘋姹傜殑鏄竴涓ぇ鍐呭瓨錛屾鏃墮渶瑕佸湪绱壊琛ㄧず鐨刲arge 瀛楁涓嬮潰鍗曠嫭鍒嗛厤錛涚敤鎴瘋姹傜殑鍐呭瓨?shù)笉澶т簬max鐨勮瘽錛屽氨鏄皬鍐呭瓨鐢寵錛岀洿鎺ュ湪鏁版嵁閮ㄥ垎鍒嗛厤錛屾鏃跺皢浼?xì)绉诲姩last鎸囬拡銆?/p>

浜屻佸垎閰嶅皬鍧楀唴瀛?size <= max)

涓婇潰鍒涘緩濂戒簡(jiǎn)涓涓彲鐢ㄧ殑鍐呭瓨姹犱簡(jiǎn)錛屼篃鎻愬埌浜?jiǎn)灏忓潡鍐呭瓨鐨勫垎閰嶉棶棰樸俷ginx鎻愪緵緇欑敤鎴蜂嬌鐢ㄧ殑鍐呭瓨鍒嗛厤鎺ュ彛鏈夛細(xì)
void *ngx_palloc(ngx_pool_t *pool, size_t size);
void *ngx_pnalloc(ngx_pool_t *pool, size_t size);
void *ngx_pcalloc(ngx_pool_t *pool, size_t size);
void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment);

ngx_palloc鍜宯gx_pnalloc閮芥槸浠庡唴瀛樻睜閲屽垎閰峴ize澶у皬鍐呭瓨錛岃嚦浜庡垎寰楃殑鏄皬鍧楀唴瀛樿繕鏄ぇ鍧楀唴瀛橈紝灝嗗彇鍐充簬size鐨勫ぇ灝忥紱 浠栦滑鐨勪笉鍚屼箣澶勫湪浜庯紝palloc鍙栧緱鐨勫唴瀛樻槸瀵歸綈鐨勶紝pnalloc鍒欏惁銆俷gx_pcalloc鏄洿鎺ヨ皟鐢╬alloc鍒嗛厤濂藉唴瀛橈紝鐒跺悗榪涜涓嬈?鍒?濮嬪寲鎿嶄綔銆俷gx_pmemalign灝嗗湪鍒嗛厤size澶у皬鐨勫唴瀛樺茍鎸塧lignment瀵歸綈錛岀劧鍚庢寕鍒發(fā)arge瀛楁涓嬶紝褰撳仛澶у潡鍐呭瓨澶勭悊銆備笅闈㈢敤鍥懼艦 灞曠ず涓涓嬪垎閰嶅皬鍧楀唴瀛樼殑妯″瀷錛?br />
涓婂浘榪欎釜鍐呭瓨姹犳ā鍨嬫槸鐢變笂3涓皬鍐呭瓨姹犳瀯鎴愮殑錛岀敱浜庣涓涓唴瀛樻睜涓婂墿浣欑殑鍐呭瓨?shù)笉澶熷垎閰嶄簡(jiǎn)锛屼簬鏄癁鍒涘晦Z簡(jiǎn)絎簩涓柊鐨勫唴瀛樻睜錛岀涓変釜鍐呭瓨姹犳槸鐢變簬鍓嶉潰涓や釜鍐呭瓨 姹犵殑鍓╀綑閮ㄥ垎閮戒笉澶熷垎閰嶏紝鎵浠ュ垱寤轟簡(jiǎn)絎笁涓唴瀛樻睜鏉ユ弧瓚崇敤鎴風(fēng)殑闇姹傘傜敱鍥懼彲瑙侊細(xì)鎵鏈夌殑灝忓唴瀛樻睜鏄敱涓涓崟鍚戦摼琛ㄧ淮鎶ゅ湪涓璧風(fēng)殑銆傝繖閲岃繕鏈変袱涓瓧孌甸渶瑕佸叧 娉紝failed鍜宑urrent瀛楁銆俧ailed琛ㄧず鐨勬槸褰撳墠榪欎釜鍐呭瓨姹犵殑鍓╀綑鍙敤鍐呭瓨?shù)笉鑳芥弧鑳鲧敤鎴峰垎閰嶈h眰鐨勬鏁幫紝鍗蟲(chóng)槸璇達(dá)細(xì)涓涓垎閰嶈姹傚埌鏉ュ悗錛屽湪 榪欎釜鍐呭瓨姹犱笂鍒嗛厤涓嶅埌鎯寵鐨勫唴瀛橈紝閭d箞灝眆ailed灝變細(xì)澧炲姞1錛涜繖涓垎閰嶈姹傚皢浼?xì)閫掍氦緇欎笅涓涓唴瀛樻睜鍘誨鐞嗭紝濡傛灉涓嬩竴涓唴瀛樻睜涔熶笉鑳芥弧瓚籌紝閭d箞瀹冪殑 failed涔熶細(xì)鍔?錛岀劧鍚庡皢璇鋒眰緇х畫(huà)寰(xiàn)涓嬩紶閫掞紝鐩村埌婊¤凍璇鋒眰涓烘錛堝鏋滄病鏈夌幇鎴愮殑鍐呭瓨姹犳潵婊¤凍錛屼細(xì)鍐嶅垱寤轟竴涓柊鐨勫唴瀛樻睜錛夈俢urrent瀛楁浼?xì)闅忕潃 failed鐨勫鍔犺屽彂鐢熸敼鍙橈紝濡傛灉current鎸囧悜鐨勫唴瀛樻睜鐨刦ailed杈懼埌浜?鐨勮瘽錛宑urrent灝辨寚鍚戜笅涓涓唴瀛樻睜浜?jiǎn)銆傜寽嫻嬶細(xì)4榪欎釜鍊煎簲璇ユ槸 浣滆呯殑緇忛獙鍊鹼紝鎴栬呮槸涓涓粺璁″箋?/p>

涓夈佸ぇ鍧楀唴瀛樼殑鍒嗛厤(size > max)

澶у潡鍐呭瓨鐨勫垎閰嶈姹備笉浼?xì)鐩存帴鍦ㄥ唴瀛樻睜涓婂垎閰嶅唴瀛樻潵婊…懟I紝鑰屾槸鐩存帴鍚戞搷浣滅郴緇熺敵璇瘋繖涔堜竴鍧楀唴瀛橈紙灝卞儚鐩存帴浣跨敤malloc鍒嗛厤鍐呭瓨?shù)竴鏍鳳級(jí)錛岀劧鍚庡皢榪欏潡 鍐呭瓨鎸傚埌鍐呭瓨姹犲ご閮ㄧ殑large瀛楁涓嬨傚唴瀛樻睜鐨勪綔鐢ㄥ湪浜庤В鍐沖皬鍧楀唴瀛樻睜鐨勯綣佺敵璇烽棶棰橈紝瀵逛簬榪欑澶у潡鍐呭瓨錛屾槸鍙互蹇嶅彈鐩存帴鐢寵鐨勩傚悓鏍鳳紝鐢ㄥ浘褰㈠睍紺哄ぇ鍧?鍐呭瓨鐢寵妯″瀷錛?br />
娉ㄦ剰姣忓潡澶у唴瀛橀兘瀵瑰簲鏈変竴涓ご閮ㄧ粨鏋勶紙next&alloc錛夛紝榪欎釜澶撮儴緇撴瀯鏄敤鏉ュ皢鎵鏈夊ぇ鍐呭瓨?shù)覆鎴愪竴涓摼琛ㄧ敤鐨勩傝繖涓ご閮ㄧ粨鏋勪笉鏄洿鎺ュ悜鎿嶄綔緋?緇熺敵璇風(fēng)殑錛岃屾槸褰撳仛灝忓潡鍐呭瓨錛堝ご閮ㄧ粨鏋勬病鍑犱釜瀛楄妭錛夌洿鎺ュ湪鍐呭瓨姹犻噷鐢寵鐨勩傝繖鏍風(fēng)殑澶у潡鍐呭瓨鍦ㄤ嬌鐢ㄥ畬鍚庯紝鍙兘闇瑕佺涓鏃墮棿閲婃斁錛岃妭鐪佸唴瀛樼┖闂達(dá)紝鍥犳 nginx鎻愪緵浜?jiǎn)鎺ュ彛鍑芥晭图?xì)ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p)錛涙鍑芥暟涓撻棬鐢ㄦ潵閲婃斁鏌愪釜鍐呭瓨姹犱笂鐨勬煇涓ぇ鍧楀唴瀛橈紝p灝辨槸澶у唴瀛樼殑鍦板潃銆俷gx_pfree鍙細(xì)閲婃斁澶у唴瀛橈紝涓嶄細(xì)閲婃斁鍏跺搴旂殑澶撮儴緇撴瀯錛屾瘯绔熷ご閮ㄧ粨 鏋勬槸褰撳仛灝忓唴瀛樺湪鍐呭瓨姹犻噷鐢寵鐨勶紱閬楃暀涓嬫潵鐨勫ご閮ㄧ粨鏋勪細(xì)浣滀笅涓嬈$敵璇峰ぇ鍐呭瓨?shù)箣鐢ㄣ?/p>

鍥涖乧leanup璧勬簮


鍙互鐪嬪埌鎵鏈夋寕杞藉湪鍐呭瓨姹犱笂鐨勮祫婧愬皢褰㈡垚涓涓驚鐜摼琛紝涓璺蛋鏉ワ紝鍙戠幇閾捐〃榪欑鐪嬩技綆鍗曠殑鏁版嵁緇撴瀯鍗磋棰戠箒浣跨敤銆傜敱鍥懼彲鐭ワ紝姣忎釜闇瑕佹竻鐞嗙殑璧勬簮閮藉搴旀湁涓 涓ご閮ㄧ粨鏋勶紝榪欎釜緇撴瀯涓湁涓涓叧閿殑瀛楁handler錛宧andler鏄竴涓嚱鏁版寚閽堬紝鍦ㄦ寕杞戒竴涓祫婧愬埌鍐呭瓨姹犱笂鐨勬椂鍊欙紝鍚屾椂涔熶細(xì)娉ㄥ唽涓涓竻鐞嗚祫婧愮殑鍑?鏁板埌榪欎釜handler涓娿傚嵆鏄錛屽唴瀛樻睜鍦ㄦ竻鐞哻leanup鐨勬椂鍊欙紝灝辨槸璋冪敤榪欎釜handler鏉ユ竻鐞嗗搴旂殑璧勬簮銆傛瘮濡傦細(xì)鎴戜滑鍙互灝嗕竴涓紑鎵撶殑鏂囦歡鎻?榪扮浣滀負(fù)璧勬簮鎸傝澆鍒板唴瀛樻睜涓婏紝鍚屾椂鎻愪緵涓涓叧闂枃浠舵弿榪扮殑鍑芥暟娉ㄥ唽鍒癶andler涓婏紝閭d箞鍐呭瓨姹犲湪閲婃斁鐨勬椂鍊欙紝灝變細(xì)璋冪敤鎴戜滑鎻愪緵鐨勫叧闂枃浠跺嚱鏁版潵澶勭悊鏂?浠舵弿榪扮璧勬簮浜?jiǎn)銆?/p>

浜斻佸唴瀛樼殑閲婃斁

nginx鍙彁渚涚粰浜?jiǎn)鐢ㄦ堬L(fēng)敵璇峰唴瀛樼殑鎺ュ彛錛屽嵈娌℃湁閲婃斁鍐呭瓨鐨勬帴鍙o紝閭d箞nginx鏄浣曞畬鎴愬唴瀛橀噴鏀劇殑鍛紵鎬諱笉鑳戒竴鐩寸敵璇鳳紝鐢ㄤ笉閲婃斁鍟娿傞拡瀵硅繖涓棶 棰橈紝nginx鍒╃敤浜?jiǎn)web server搴旂敤鐨勭壒孌婂満鏅潵瀹屾垚錛涗竴涓獁eb server鎬繪槸涓嶅仠鐨勬帴鍙梒onnection鍜宺equest錛屾墍浠ginx灝卞皢鍐呭瓨姹犲垎浜?jiǎn)涓嶅悓鐨劷{夌駭錛屾湁榪涚▼綰х殑鍐呭瓨姹犮乧onnection綰?鐨勫唴瀛樻睜銆乺equest綰х殑鍐呭瓨姹犮備篃灝辨槸璇達(dá)紝鍒涘緩濂戒竴涓獁orker榪涚▼鐨勬椂鍊欙紝鍚屾椂涓鴻繖涓獁orker榪涚▼鍒涘緩涓涓唴瀛樻睜錛屽緟鏈夋柊鐨勮繛鎺ュ埌鏉ュ悗錛屽氨 鍦╳orker榪涚▼鐨勫唴瀛樻睜涓婁負(fù)璇ヨ繛鎺ュ垱寤鴻搗涓涓唴瀛樻睜錛涜繛鎺ヤ笂鍒版潵涓涓猺equest鍚庯紝鍙堝湪榪炴帴鐨勫唴瀛樻睜涓婁負(fù)request鍒涘緩璧蜂竴涓唴瀛樻睜銆傝繖鏍鳳紝 鍦╮equest琚鐞嗗畬鍚庯紝灝變細(xì)閲婃斁request鐨勬暣涓唴瀛樻睜錛岃繛鎺ユ柇寮鍚庯紝灝變細(xì)閲婃斁榪炴帴鐨勫唴瀛樻睜銆傚洜鑰岋紝灝變繚璇佷簡(jiǎn)鍐呭瓨鏈夊垎閰嶄篃鏈夐噴鏀俱?/p>

鎬葷粨錛氶氳繃鍐呭瓨鐨勫垎閰嶅拰閲婃斁鍙互鐪嬪嚭錛宯ginx鍙槸灝嗗皬鍧楀唴瀛樼殑鐢寵鑱氶泦鍒頒竴璧風(fēng)敵璇鳳紝鐒跺悗涓璧烽噴鏀俱傞伩鍏嶄簡(jiǎn)棰戠箒鐢寵灝忓唴瀛橈紝闄嶄綆鍐呭瓨紕庣墖鐨勪駭鐢熺瓑闂



鍛ㄥ己 2011-06-15 16:27 鍙戣〃璇勮
]]>
Web Benchhttp://www.shnenglu.com/tankzhouqiang/archive/2011/04/26/145054.html鍛ㄥ己鍛ㄥ己Tue, 26 Apr 2011 06:50:00 GMThttp://www.shnenglu.com/tankzhouqiang/archive/2011/04/26/145054.htmlhttp://www.shnenglu.com/tankzhouqiang/comments/145054.htmlhttp://www.shnenglu.com/tankzhouqiang/archive/2011/04/26/145054.html#Feedback0http://www.shnenglu.com/tankzhouqiang/comments/commentRss/145054.htmlhttp://www.shnenglu.com/tankzhouqiang/services/trackbacks/145054.html
Web Bench is very simple tool for benchmarking WWW or proxy servers. Uses fork() for simulating multiple clients and can use HTTP/0.9-HTTP/1.1 requests. This benchmark is not very realistic, but it can test if your HTTPD can realy handle that many clients at once (try to run some CGIs) without taking your machine down. Displays pages/min and bytes/sec. Can be used in more aggressive mode with -f switch.

Web Bench 涓嬭澆涓婚〉 http://home..cz/~cz210552/webbench.html


鐢╓eb Bench 綆鍗曟祴璇曚笅nginx鏈嶅姟鍣ㄧ殑鎬ц兘銆傜粨鏋滃涓?br>嫻嬭瘯鍙傛暟 10000涓敤鎴峰茍鍙戣姹?0縐?






鍛ㄥ己 2011-04-26 14:50 鍙戣〃璇勮
]]>
久久人人爽人人爽人人片AV东京热| 久久青青草原精品国产软件| 亚洲午夜久久久久久久久电影网| 亚洲国产成人精品女人久久久| 久久受www免费人成_看片中文| 久久久一本精品99久久精品88| 久久久久亚洲AV无码专区首JN| 亚洲精品无码久久久影院相关影片| 精品人妻久久久久久888| 国产免费久久精品丫丫| 一本一本久久A久久综合精品 | 久久91精品久久91综合| 国产精品成人99久久久久91gav| 99久久香蕉国产线看观香| 国产精品一久久香蕉国产线看观看 | 久久国产福利免费| 人妻久久久一区二区三区| 久久久国产精华液| 国产国产成人精品久久| 国产亚洲精久久久久久无码77777| 久久精品国产99久久久| 国产精品久久久久蜜芽| 精品久久综合1区2区3区激情| 久久久精品人妻一区二区三区蜜桃| 久久有码中文字幕| 国产2021久久精品| 精品久久一区二区| 精品少妇人妻av无码久久| 漂亮人妻被黑人久久精品| 热99RE久久精品这里都是精品免费| 久久精品国产亚洲AV不卡| 大蕉久久伊人中文字幕| 色偷偷888欧美精品久久久| 久久久久高潮毛片免费全部播放| A级毛片无码久久精品免费| 狠狠色狠狠色综合久久| 亚洲伊人久久精品影院| 欧美黑人激情性久久| 久久精品水蜜桃av综合天堂| 日韩久久久久久中文人妻| 国产V亚洲V天堂无码久久久|