Ant*_*n K 7 profiling couchdb tcp http congestion-control
我在Mint/Debian盒子上设置了非常简单的CouchDB.我的Java webapp在查询CouchDB时遇到了相当长的延迟,所以我开始寻找原因.
编辑:查询模式是许多小查询和小JSON对象(如300字节向上/ 1Kbyte向下).
Wireshark转储非常好,主要显示3-5毫秒的请求 - 响应周转.JVM帧采样向我展示了套接字代码(客户端查询到Couch)有点繁忙,但没什么了不起的.然后我尝试用ApacheBench和oops来描述它:我目前看到keep-alive在非持久性设置上引入了稳定的额外39ms延迟.
有谁知道如何解释这个?也许持久连接会增加TCP层的拥塞窗口,然后由于TCP_WAIT和小的请求/响应大小而空闲,或类似的东西?是否应该为环回tcp连接打开此选项(TCP_WAIT)?
w@mint ~ $ uname -a
Linux mint 2.6.39-2-486 #1 Tue Jul 5 02:52:23 UTC 2011 i686 GNU/Linux
w@mint ~ $ curl http://127.0.0.1:5984/
{"couchdb":"Welcome","version":"1.1.1"}
Run Code Online (Sandbox Code Playgroud)
保持活着,每次请求平均40毫升
w@mint ~ $ ab -n 1024 -c 1 -k http://127.0.0.1:5984/
>>>snip
Server Software: CouchDB/1.1.1
Server Hostname: 127.0.0.1
Server Port: 5984
Document Path: /
Document Length: 40 bytes
Concurrency Level: 1
Time taken for tests: 41.001 seconds
Complete requests: 1024
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1024
Total transferred: 261120 bytes
HTML transferred: 40960 bytes
Requests per second: 24.98 [#/sec] (mean)
Time per request: 40.040 [ms] (mean)
Time per request: 40.040 [ms] (mean, across all concurrent requests)
Transfer rate: 6.22 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 1 40 1.4 40 48
Waiting: 0 1 0.7 1 8
Total: 1 40 1.3 40 48
Percentage of the requests served within a certain time (ms)
50% 40
>>>snip
95% 40
98% 41
99% 44
100% 48 (longest request)
Run Code Online (Sandbox Code Playgroud)
没有keepalive,并且瞧 - 每个请求大约1毫秒.
w@mint ~ $ ab -n 1024 -c 1 http://127.0.0.1:5984/
>>>snip
Time taken for tests: 1.080 seconds
Complete requests: 1024
Failed requests: 0
Write errors: 0
Total transferred: 236544 bytes
HTML transferred: 40960 bytes
Requests per second: 948.15 [#/sec] (mean)
Time per request: 1.055 [ms] (mean)
Time per request: 1.055 [ms] (mean, across all concurrent requests)
Transfer rate: 213.89 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 1 1 1.0 1 11
Waiting: 1 1 0.9 1 11
Total: 1 1 1.0 1 11
Percentage of the requests served within a certain time (ms)
50% 1
>>>snip
80% 1
90% 2
95% 3
98% 5
99% 6
100% 11 (longest request)
Run Code Online (Sandbox Code Playgroud)
好的,现在保持活动状态,但也要求通过http标头关闭连接.每个请求大约1毫秒左右.
w@mint ~ $ ab -n 1024 -c 1 -k -H 'Connection: close' http://127.0.0.1:5984/
>>>snip
Time taken for tests: 1.131 seconds
Complete requests: 1024
Failed requests: 0
Write errors: 0
Keep-Alive requests: 0
Total transferred: 236544 bytes
HTML transferred: 40960 bytes
Requests per second: 905.03 [#/sec] (mean)
Time per request: 1.105 [ms] (mean)
Time per request: 1.105 [ms] (mean, across all concurrent requests)
Transfer rate: 204.16 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 1 1 1.2 1 14
Waiting: 0 1 1.1 1 13
Total: 1 1 1.2 1 14
Percentage of the requests served within a certain time (ms)
50% 1
>>>snip
80% 1
90% 2
95% 3
98% 6
99% 7
100% 14 (longest request)
Run Code Online (Sandbox Code Playgroud)
是的,这与tcp套接字设置选项有关.现在,这种配置平稳了所有三种情况,每个请求1ms.
[httpd]
socket_options = [{nodelay, true}]
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此处:http: //wiki.apache.org/couchdb/Performance#Network
| 归档时间: |
|
| 查看次数: |
1841 次 |
| 最近记录: |