我注意到 dockerd 和 docker-proxy 进程占用的 CPU 比预期的多,分别为 15% 和 24%,所以我决定使用“主机”网络来避免开销。但是,我得到的结果要差得多。如何解释这一点?
nginx 容器不会发生同样的情况(使用“主机”网络时性能从 43k req/sec 提高到 48k req/sec)。
场景 #1 - “桥接”网络
启动 CouchDB 容器:docker run -d -p 5984:5984 couchdb
$ wrk -d 60 http://localhost:5984/mydb/mydoc
Running 1m test @ http://localhost:5984/mydb/mydoc
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.51ms 197.54us 7.81ms 75.74%
Req/Sec 3.32k 111.59 3.60k 71.58%
396492 requests in 1.00m, 698.02MB read
Requests/sec: 6608.12
Transfer/sec: 11.63MB
场景 #2 - “主机”网络
启动 CouchDB 容器:docker run --net=host -d -p 5984:5984 couchdb
$ wrk -d 60 http://localhost:5984/mydb/mydoc
Running 1m test @ http://localhost:5984/mydb/mydoc
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 42.98ms 1.17ms 54.99ms 96.96%
Req/Sec 116.79 13.73 151.00 56.00%
13966 requests in 1.00m, 24.59MB read
Requests/sec: 232.57
Transfer/sec: 419.29KB
环境
- 硬件:i7-6700K、16GB、SSD
- 操作系统:Fedora 25(内核 4.10.13)
- 数据库:CouchDB 1.6.1