ngx_http_degraded()

This commit is contained in:
Igor Sysoev 2010-10-04 14:59:41 +00:00
parent 61d5e5e67f
commit 81aa52829a
2 changed files with 36 additions and 11 deletions

View File

@ -86,25 +86,38 @@ ngx_module_t ngx_http_degradation_module = {
}; };
static ngx_uint_t ngx_degraded;
static ngx_int_t static ngx_int_t
ngx_http_degradation_handler(ngx_http_request_t *r) ngx_http_degradation_handler(ngx_http_request_t *r)
{ {
time_t now; ngx_http_degradation_loc_conf_t *dlcf;
static size_t sbrk_size;
static time_t sbrk_time;
ngx_http_degradation_loc_conf_t *dlcf;
ngx_http_degradation_main_conf_t *dmcf;
dlcf = ngx_http_get_module_loc_conf(r, ngx_http_degradation_module); dlcf = ngx_http_get_module_loc_conf(r, ngx_http_degradation_module);
if (dlcf->degrade == 0) { if (dlcf->degrade && ngx_http_degraded(r)) {
return NGX_DECLINED; return dlcf->degrade;
} }
return NGX_DECLINED;
}
ngx_uint_t
ngx_http_degraded(ngx_http_request_t *r)
{
time_t now;
ngx_uint_t log;
static size_t sbrk_size;
static time_t sbrk_time;
ngx_http_degradation_main_conf_t *dmcf;
dmcf = ngx_http_get_module_main_conf(r, ngx_http_degradation_module); dmcf = ngx_http_get_module_main_conf(r, ngx_http_degradation_module);
if (dmcf->sbrk_size) { if (dmcf->sbrk_size) {
log = 0;
now = ngx_time(); now = ngx_time();
/* lock mutex */ /* lock mutex */
@ -120,19 +133,27 @@ ngx_http_degradation_handler(ngx_http_request_t *r)
sbrk_size = (size_t) sbrk(0) - ((uintptr_t) ngx_palloc & ~0x3FFFFF); sbrk_size = (size_t) sbrk(0) - ((uintptr_t) ngx_palloc & ~0x3FFFFF);
sbrk_time = now; sbrk_time = now;
log = 1;
} }
/* unlock mutex */ /* unlock mutex */
if (sbrk_size >= dmcf->sbrk_size) { if (sbrk_size >= dmcf->sbrk_size) {
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, ngx_degraded = 1;
"degradation sbrk: %uz", sbrk_size);
return dlcf->degrade; if (log) {
ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
"degradation sbrk:%uzM",
sbrk_size / (1024 * 1024));
}
return 1;
} }
} }
return NGX_DECLINED; ngx_degraded = 0;
return 0;
} }

View File

@ -142,6 +142,10 @@ char *ngx_http_merge_types(ngx_conf_t *cf, ngx_array_t **keys,
ngx_int_t ngx_http_set_default_types(ngx_conf_t *cf, ngx_array_t **types, ngx_int_t ngx_http_set_default_types(ngx_conf_t *cf, ngx_array_t **types,
ngx_str_t *default_type); ngx_str_t *default_type);
#if (NGX_HTTP_DEGRADATION)
ngx_uint_t ngx_http_degraded(ngx_http_request_t *);
#endif
extern ngx_module_t ngx_http_module; extern ngx_module_t ngx_http_module;