锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久波多野结衣高潮,久久久久亚洲AV无码去区首,久久久久亚洲AV无码专区网站 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鐨勫師鐞嗗強浣跨敤鏂規硶錛岀敋鑷蟲簮鐮佸垎鏋愮瓑錛夛紝浠呯湅涓涓婲ginx鏄浣曚嬌鐢╡poll鐨勩?/p>

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

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涓轟簡鏂逛究鏀寔鍜屽紑鍙戝叿浣撶殑I/O妯″瀷錛屼粠鑰屽疄鐜扮殑涓灞傛娊璞°備唬鐮佸悗闈㈢殑娉ㄩ噴灝嗗姛鑳借鏄庡緱寰堣緇嗕簡錛屾湰鏂囧氨鍙噸鐐瑰叧娉╪gx_epoll_init鍜宯gx_epoll_process_events涓や釜鍑芥暟錛屽叾浠栧嚑涓嚱鏁板氨鏆備笖蹇界暐浜嗐?/p>

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

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瀵硅薄錛屽閲忎負鎬昏繛鎺ユ暟鐨勪竴鍗?/
        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瀹氫箟涓猴細
		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灝嗘坊鍔犺繖涓爣蹇?涓昏涓轟簡瀹炵幇杈圭紭瑙﹀彂*/
    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;
	/*涓寮濮嬪氨鏄瓑寰呬簨浠訛紝鏈闀跨瓑寰呮椂闂翠負timer錛沶ginx涓轟簨浠?
	涓撻棬鐢ㄧ孩榛戞爲緇存姢浜嗕竴涓鏃跺櫒銆傚悗緇榪欎釜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灝嗘椂闂寸紦瀛樺埌浜嗕竴緇勫叏灞鍙橀噺涓紝鏂逛究紼嬪簭楂樻晥鐨勮幏鍙栦簨浠躲?/
        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;
            }

			/*浜嬩歡鏀懼叆鐩稿簲鐨勯槦鍒椾腑錛涘叧浜庢澶勭殑鍏堝叆闃熷啀澶勭悊錛屽湪鍓嶉潰鐨勬枃绔犱腑宸茬粡浠嬬粛榪囦簡銆?/
            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;
		/*鍙戠敓鐨勬槸涓涓啓浜嬩歡錛屽拰璇諱簨浠跺畬鍏ㄤ竴鏍風殑閫昏緫榪囩▼*/
        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鍑芥暟涔熷氨榪欎箞涓鐐逛唬鐮佷簡錛屼絾鏁翠釜epoll榪樻湁娣誨姞浜嬩歡鍜屽垹闄や簨浠剁瓑鐨勭浉鍏沖嚱鏁幫紝浠g爜閮藉緢綆鍗曪紝鏈枃灝變笉鍋氬叿浣撶殑鍒嗘瀽浜嗐?/p>



鍛ㄥ己 2011-07-10 00:54 鍙戣〃璇勮
]]>
Nginx鐨勫唴瀛樻睜瀹炵幇錛堣漿杞斤級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鐨勫唴瀛樻睜瀹炵幇寰楀緢綺懼閥錛屼唬鐮佷篃寰堢畝媧併傛葷殑鏉ヨ錛屾墍鏈夌殑鍐呭瓨姹犲熀鏈兘涓涓畻鏃細鐢寵澶у潡鍐呭瓨錛岄伩鍏?#8220;緇嗘按闀挎祦”銆?/p>

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

nginx鍐呭瓨姹犱富瑕佹湁涓嬮潰涓や釜緇撴瀯鏉ョ淮鎶わ紝浠栦滑鍒嗗埆緇存姢浜嗗唴瀛樻睜鐨勫ご閮ㄥ拰鏁版嵁閮ㄣ傛澶勬暟鎹儴灝辨槸渚涚敤鎴峰垎閰嶅皬鍧楀唴瀛樼殑鍦版柟銆?/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;
};


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

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

涓婇潰鍒涘緩濂戒簡涓涓彲鐢ㄧ殑鍐呭瓨姹犱簡錛屼篃鎻愬埌浜嗗皬鍧楀唴瀛樼殑鍒嗛厤闂銆俷ginx鎻愪緵緇欑敤鎴蜂嬌鐢ㄧ殑鍐呭瓨鍒嗛厤鎺ュ彛鏈夛細
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瀵歸綈錛岀劧鍚庢寕鍒發arge瀛楁涓嬶紝褰撳仛澶у潡鍐呭瓨澶勭悊銆備笅闈㈢敤鍥懼艦 灞曠ず涓涓嬪垎閰嶅皬鍧楀唴瀛樼殑妯″瀷錛?br />
涓婂浘榪欎釜鍐呭瓨姹犳ā鍨嬫槸鐢變笂3涓皬鍐呭瓨姹犳瀯鎴愮殑錛岀敱浜庣涓涓唴瀛樻睜涓婂墿浣欑殑鍐呭瓨涓嶅鍒嗛厤浜嗭紝浜庢槸灝卞垱寤轟簡絎簩涓柊鐨勫唴瀛樻睜錛岀涓変釜鍐呭瓨姹犳槸鐢變簬鍓嶉潰涓や釜鍐呭瓨 姹犵殑鍓╀綑閮ㄥ垎閮戒笉澶熷垎閰嶏紝鎵浠ュ垱寤轟簡絎笁涓唴瀛樻睜鏉ユ弧瓚崇敤鎴風殑闇姹傘傜敱鍥懼彲瑙侊細鎵鏈夌殑灝忓唴瀛樻睜鏄敱涓涓崟鍚戦摼琛ㄧ淮鎶ゅ湪涓璧風殑銆傝繖閲岃繕鏈変袱涓瓧孌甸渶瑕佸叧 娉紝failed鍜宑urrent瀛楁銆俧ailed琛ㄧず鐨勬槸褰撳墠榪欎釜鍐呭瓨姹犵殑鍓╀綑鍙敤鍐呭瓨涓嶈兘婊¤凍鐢ㄦ埛鍒嗛厤璇鋒眰鐨勬鏁幫紝鍗蟲槸璇達細涓涓垎閰嶈姹傚埌鏉ュ悗錛屽湪 榪欎釜鍐呭瓨姹犱笂鍒嗛厤涓嶅埌鎯寵鐨勫唴瀛橈紝閭d箞灝眆ailed灝變細澧炲姞1錛涜繖涓垎閰嶈姹傚皢浼氶掍氦緇欎笅涓涓唴瀛樻睜鍘誨鐞嗭紝濡傛灉涓嬩竴涓唴瀛樻睜涔熶笉鑳芥弧瓚籌紝閭d箞瀹冪殑 failed涔熶細鍔?錛岀劧鍚庡皢璇鋒眰緇х畫寰涓嬩紶閫掞紝鐩村埌婊¤凍璇鋒眰涓烘錛堝鏋滄病鏈夌幇鎴愮殑鍐呭瓨姹犳潵婊¤凍錛屼細鍐嶅垱寤轟竴涓柊鐨勫唴瀛樻睜錛夈俢urrent瀛楁浼氶殢鐫 failed鐨勫鍔犺屽彂鐢熸敼鍙橈紝濡傛灉current鎸囧悜鐨勫唴瀛樻睜鐨刦ailed杈懼埌浜?鐨勮瘽錛宑urrent灝辨寚鍚戜笅涓涓唴瀛樻睜浜嗐傜寽嫻嬶細4榪欎釜鍊煎簲璇ユ槸 浣滆呯殑緇忛獙鍊鹼紝鎴栬呮槸涓涓粺璁″箋?/p>

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

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

鍥涖乧leanup璧勬簮


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

浜斻佸唴瀛樼殑閲婃斁

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

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



鍛ㄥ己 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 鍙戣〃璇勮
]]>
国产精品久久久久乳精品爆| 久久中文字幕精品| 国产精品无码久久综合| 国产精品毛片久久久久久久| 99久久精品国产高清一区二区| 精品国产福利久久久| 久久久久久久亚洲精品| 亚洲国产精品无码久久久秋霞2 | 99久久精品国产一区二区| 99久久免费只有精品国产| 久久精品国产男包| 亚洲成色999久久网站| 久久久久精品国产亚洲AV无码 | 99久久er这里只有精品18| 99久久国产综合精品网成人影院| 一本久道久久综合狠狠躁AV| 久久综合香蕉国产蜜臀AV| 久久久无码精品午夜| 久久无码人妻一区二区三区午夜| 久久精品国产黑森林| 狠狠88综合久久久久综合网| 久久久久久免费视频| 国产精品一区二区久久精品无码| 亚洲欧洲日产国码无码久久99| 9999国产精品欧美久久久久久| 亚洲av成人无码久久精品 | 欧美伊人久久大香线蕉综合| 老司机国内精品久久久久| 久久久久久久97| 亚洲国产精品一区二区久久hs| 色悠久久久久久久综合网| 99久久综合国产精品二区| 国产欧美一区二区久久| 久久综合给合久久狠狠狠97色69| 欧美亚洲国产精品久久高清 | 久久精品国产亚洲av麻豆色欲| 无码精品久久一区二区三区| 久久综合给合综合久久| 久久国产高清字幕中文| 久久精品国产69国产精品亚洲| 99久久99这里只有免费费精品|