这个问题可能和nginx的关系不大,求教各位排查思路。
一台nginx做内部调用转发,后端是tomcat
在nginx日志里偶尔会发现响应时间比较长的请求,如大于0.5秒,但是在后端的日志里看到的响应时间可能只有50ms。
在这两台机器上抓包,看到nginx是第一时间将包发给后端了(之前有看到nginx,在接受到请求后,并没有第一时间发送给后端,设置net.ipv4.tcp_tw_reuse=0后,貌似没再出现这个问题),tomcat也是第一时间收到了请求,但是响应确实是在很长时间后发出来的,难道是tomcat日志记录的响应时间不准?
猜测是不是网络方面的问题,如tomcat很快的结束了请求,但最终响应发出去延时了?
nginx version: nginx/1.5.8
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
configure arguments: --prefix=/usr/local/app/nginx --add-module=../ngx_devel_kit-0.2.19 --add-module=../lua-nginx-module-0.9.5rc2 --add-module=../lua-upstream-nginx-module-master
tomcat version: Apache Tomcat/6.0.36, 使用的是httpnioprotocol。
nginx upstream相关配置片段:
keepalive_timeout 5;
log_format main '$remote_addr - $remote_port [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$http_host $upstream_addr $upstream_response_time $request_time';
upstream video {
server 192.168.0.202:8110;
server 192.168.0.202:8111;
server 192.168.0.202:8112;
server 192.168.0.77:8110;
server 192.168.0.77:8111;
server 192.168.0.77:8112;
server 192.168.0.86:8110;
server 192.168.0.86:8111;
server 192.168.0.86:8112;
keepalive 32;
}
server {
listen 8106;
server_name kas2video;
access_log /usr/local/app/nginx/logs/access.log main;
location / {
proxy_pass http://video;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
相关日志(去掉url):
nginx:192.168.0.149 - 37373 [25/Jul/2014:15:27:37 +0800] "GET /xxxxxxx HTTP/1.1" 200 394 "-" "-" kas2video:8106 192.168.0.202:8110 0.649 0.649
tomcat: 192.168.0.63 - - [25/Jul/2014:15:27:36 +0800] GET /xxxxxxx HTTP/1.1 200 381 0.007