我有一个简单的nginx服务器来监视请求并将它们存储在访问日志中。 请求包含查询参数中的数据,大约500字节。 我的输出只是一个HTTP 204响应。 但是,当我监视networking带宽时,我看到传入速率为8.44 Mbit / s,传出速率为5.19 MBit / s。
问题是,为什么传出率很高?
下面是“tcpflow -p -C -i eth0 port 80”的输出。
GET ############## HTTP/1.1 Host: ############## Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Forwarded: for="[############]" Origin: ########### Referer: ######### Save-Data: on Scheme: http Via: 1.1 Chrome-Compression-Proxy X-Forwarded-For: ################# Connection: Keep-alive User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; SM-J710FN Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36 write error to stdout HTTP/1.1 204 No Content Server: nginx/1.4.6 (Ubuntu) Date: Fri, 10 Mar 2017 04:54:43 GMT Connection: keep-alive Access-Control-Allow-Origin: * Content-Type: text/plain
为什么传出率很高?
我不认为我们可以合理回答这个问题,但我们可以给你一些关于如何自己回答的想法。
你似乎专注于你的http服务器产生的stream量。 系统上的许多其他进程可以使用该networking。
我会试图使用tcpdump来获取线上数据包的详细视图。 从中我可以了解除HTTP之外的其他stream量是否活跃,以及它如何促成整体networking使用。 我可以根据需要进一步分析。
如果您的传入请求的音量大于您的传出响应,那么您的configuration文件对于Web服务来说有点不同寻常 – 大多数Web服务的回传远远超过了他们收到的。
看看你给出的输出,nginx的响应大约是167个字节,而你说平均请求大约是500个字节。
所以,如果我们做一个快速的餐巾纸计算,每个请求大约有1MB(8Mb)@ 500字节: 1000000/500 = 2000 requests/sec 。 我怀疑并不是所有的请求都返回你共享的170字节的响应,因为6000000/8/170 = 4411 – 或者换句话说,有些响应远远大于170字节,或者(不太可能)你的服务器响应两次每个请求。
所以我想问题是,预计每秒请求/响应的粗略范围(2000到4000)