Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx-0.7.45
On Tue, Mar 31, 2009 at 02:49:16PM +0400, Andrey Zonov wrote:
> Про 50 и 30 не понял.
> Кеш чистится до 0 - всегда, причём иногда cache manager после очистки
> начинает жрать 100% (после увеличения max_size это стало происходить
> реже, но всё же случается)
>
> В качестве теста я запускаю:
> $ while :; do i=$(($i+1)); fetch -q "http://localhost:8080/blah?id=${i}"; done
> и смотрю df. Цикл длится минуты 3 после чего происходит очистка кеша.
>
> Кстати, на заметку, если убрать из конфига:
> proxy_cache_valid 200 302 60m;
> воркер на каждый запрос падает по 11 сигналу.
Прилагаемый патч должен вылечить кэш-менеджер и падения.
--
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_file_cache.c
===================================================================
--- src/http/ngx_http_file_cache.c (revision 1945)
+++ src/http/ngx_http_file_cache.c (working copy)
@@ -448,6 +448,7 @@
fcn->valid_sec = 0;
fcn->uniq = 0;
fcn->body_start = 0;
+ fcn->length = 0;
done:
@@ -1065,6 +1066,9 @@
ngx_shmtx_unlock(&cache->shpool->mutex);
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0,
+ "http file cache size: %O", size);
+
if (size < cache->max_size) {
return next;
}
@@ -1290,6 +1294,10 @@
ngx_uint_t i;
ngx_http_cache_valid_t *valid;
+ if (cache_valid == NULL) {
+ return 0;
+ }
+
valid = cache_valid->elts;
for (i = 0; i < cache_valid->nelts; i++) {
|