问题描述
最近之前一直正常的视频点播系统播放存储在hadoop上的视频出现响应时间长达一分钟的情况。点播系统播放通过nginx_lua代理从hadoop取数据。
查看nginx的日志,出现大量的错误如下。
*1885808 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 175.43.173.98, server: videopush.10jqka.com.cn, request: "GET /F10shang_1512559724.mp4 HTTP/1.1", upstream: "http://192.168.10.150:50075/webhdfs/v1/F10shang_1512559724.mp4?op=OPEN&namenoderpcaddress=localhost.localdomain:9001&offset=0", host: "videopull.10jqka.com.cn:8188"
其实是由于请求hadoop接收响应超时断开连接后,并且不断发起新的连接。
查看hadoop的datanode日志:
2017-12-08 11:43:24,627 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: BlockSender.sendChunks() exception:
java.io.IOException: 断开的管道
出现大量如上的错误,实际是由于nginx超时断开连接后,hadoop往断开的连接写数据导致的。
解决方法
既然nginx出现超时连接,那么就把nginx的代理请求超时时间设置大一些。
server {
listen 80;
server_name localhost;
//如下为设置超时
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
实际上导致nginx超时的原因应该是hadoop的响应时间变长,具体hadoop为什么响应时间变长了还没有研究清楚。