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
ngx_http_degradation_handler(ngx_http_request_t *r)
{
time_t now;
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);
if (dlcf->degrade == 0) {
if (dlcf->degrade && ngx_http_degraded(r)) {
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);
if (dmcf->sbrk_size) {
log = 0;
now = ngx_time();
/* 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_time = now;
log = 1;
}
/* unlock mutex */
if (sbrk_size >= dmcf->sbrk_size) {
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"degradation sbrk: %uz", sbrk_size);
ngx_degraded = 1;
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_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;