Nginx缓存锁定总是导致500毫秒延迟

时间:2017-09-12 10:11:32

标签: caching nginx

Nginx缓存锁定请求(http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock)总是需要500毫秒才能响应

  

$ ab -n 2 -c 2 http://192.168.12.103/test1234
  access.log的:
  192.168.12.103 - - [12 / Sep / 2017:02:34:59 -0700]“GET / test1234 HTTP / 1.0”200 12“ - ”“ApacheBench / 2.3”“ - ”127.0.0.1:9095 0.002 0.002 MISS <登记/>   192.168.12.103 - - [12 / Sep / 2017:02:34:59 -0700]“GET / test1234 HTTP / 1.0”200 12“ - ”“ApacheBench / 2.3”“ - ” - - 0.502 HIT

我知道它缓冲到临时文件并将其复制到缓存中。但500ms看起来很大。谁知道为什么?
任何帮助将不胜感激。

设置信息:

  1. Test upstream server
  2. 缓存位于tmpfs(mount -t tmpfs -o size = 512m tmpfs / tmpfs)
  3. nginx版本:1.7.2.1
  4. nginx config

    worker_processes  1;
    error_log  logs/error.log;
    daemon off;
    pid        /var/run/nginx.pid;
    events {}
    http {
        proxy_cache_path /tmpfs/local_cache keys_zone=local_cache:250m levels=1:2 inactive=8s max_size=1G;
        proxy_temp_path /tmpfs;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" '
                          '$upstream_addr $upstream_response_time $request_time $upstream_cache_status';
    
        access_log  logs/access.log  main;
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                    proxy_pass http://127.0.0.1:9095;
                    proxy_cache local_cache;
                    proxy_cache_valid 200 2s;
                    proxy_cache_lock on;
            }
    
        }
    }
    

1 个答案:

答案 0 :(得分:1)

这似乎是默认行为。高速缓存锁定请求被最坏情况500ms或time_out值锁定。(source

如果上游响应时间稳定,对于cache_lock_timeout任何高于响应时间的值,它将避免该行为。在这种特殊情况下,我们可以设置大约5ms,第一个请求将在0-1 ms内返回,锁定的请求将在5-6ms内返回。