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看起来很大。谁知道为什么?
任何帮助将不胜感激。
设置信息:
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;
}
}
}
答案 0 :(得分:1)
这似乎是默认行为。高速缓存锁定请求被最坏情况500ms或time_out值锁定。(source)
如果上游响应时间稳定,对于cache_lock_timeout任何高于响应时间的值,它将避免该行为。在这种特殊情况下,我们可以设置大约5ms,第一个请求将在0-1 ms内返回,锁定的请求将在5-6ms内返回。