Кеширование проблема: перестает кешировать

Dmitry E. Oboukhov unera at uvw.ru
Sat Jul 27 21:54:40 UTC 2013


продолжаю играться с кешированием
на тестах (в том числе конкурентных, ab) все было хорошо - попробовали
под нагрузкой.

nginx 1.2.1

конфиг такой:

proxy_cache_path /var/lib/nginx/proxy levels=1:2 keys_zone=proxy:30m max_size=1G;

    location ~ /cached/ {
        proxy_pass                              http://backend;
        proxy_cache proxy;
        proxy_buffering                         on;
        proxy_cache_valid                       200     60m;
        proxy_cache_lock                        on;
        proxy_method                            GET;
        proxy_cache_use_stale                   updating;

        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header  "X-Taxi-Location" "/cached";

        proxy_set_header    Cookie '';
        proxy_ignore_headers 'Set-Cookie';
        proxy_cache_key $uri;
        proxy_hide_header 'Set-Cookie';

        expires off;
    }


Все запросы что имеют в урле /cached/ кешируются на 60m

Но есть проблема.
пока нагрузка небольшая все замечательно:

смотрим логи nginx (grep /cached/) а так же смотрим логи бакенда
(такой же греп). Видим что на nginx приходят сотни запросов, а на
бакенд (апач) единицы.
Все хорошо.

затем повышаем нагрузку и где-то на 100-500 запросов в секунду на апач
начинают "просачиваться" запросы минуя кеш.

то есть нормальное соотношение у нас там если он все кеширует = где-то
1000:1 (то есть на 1000 запросов nginx приходится один на бакенд).

но при работе под нагрузкой соотношение меняется к 1000:500 и местами
даже к 1000:800.
На апаче вижу строго одинаковые запросы (он эту нагрузку держит,
отдает 200'ки). в tcpdump никаких заголовков, касающихся кеша не вижу.
апач всегда выдает заголовок x-accel-expires: 600 для всех ответов по
роуту /cached/.

в error логе nginx ошибок никаких про кеш нет.

правда на старте выдает вот такую фигатень:

2013/07/27 23:53:32 [info] 9945#0: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:65
2013/07/27 23:53:32 [alert] 9952#0: epoll_ctl(1, 0) failed (1: Operation not permitted)
2013/07/27 23:53:32 [alert] 9952#0: failed to register channel handler while initializing push module worker (1: Operation not permitted)
2013/07/27 23:53:32 [alert] 9953#0: epoll_ctl(1, 0) failed (1: Operation not permitted)
2013/07/27 23:53:32 [alert] 9953#0: failed to register channel handler while initializing push module worker (1: Operation not permitted)
2013/07/27 23:53:32 [alert] 2232#0: cache manager process 9952 exited with fatal code 2 and cannot be respawned

В какую сторону покопать?


-- 

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera at debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20130728/a4b325cd/attachment.bin>


Подробная информация о списке рассылки nginx-ru