проблема с fastcgi_cache_lock

Konstantin Svist fry.kun на gmail.com
Сб Июн 16 02:33:34 UTC 2012


Nginx 1.2.0

Конфиг:

server {
   listen 8081;
   location / {
    proxy_read_timeout  500ms;
    proxy_pass  http://localhost:8082;
    error_page  404  500  502  503  504  =200  @fallback;
   }
   location @fallback { echo "oops"; }
}
server {
   listen 8082;
   fastcgi_temp_path        /dev/shm/nginx_fcgi_temp  1  2;
   fastcgi_cache_path       /dev/shm/nginx_fcgi_cache  levels=1:2  
keys_zone=mycache:500m  max_size=5120m;
   fastcgi_cache_use_stale  error  timeout  updating;
   fastcgi_cache_lock       on;
   fastcgi_cache_key        $request_uri;
   fastcgi_cache_valid      200  2h;
   fastcgi_cache_bypass     $http_pragma  $http_authorization;
   fastcgi_no_cache         $http_pragma  $http_authorization;
   fastcgi_cache            mycache;
   location / {
     fastcgi_pass backend;
   }
}


Запускаю тест:
  ab -n5 -c5 'http://localhost:8081/?q=foobar'


Результат:
  1й запрос идёт на бэкенд, на обработку 45мс; остальные 4 получают 
"oops" после 500мс
Вторая попытка:
  1й запрос идёт на бэкенд, на обработку 37мс; 3 получают "oops" после 
500мс; последний получает результат из кэша, но только после 500мс



Что происходит?
Я думал что последние 4 должны получить не-"oops" результат после 45мс...



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