docker network performance reduce by nat module & kvm vs docker vs localhost

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
公网NAT网关,每月750个小时 15CU
简介:
在测试docker下postgresql性能时, 发现的一个DNAT转换后的网络性能问题.

首先附上KVM,DOCKER,本机的几组测试数据(测试数据仅供参考, 有兴趣的朋友可以自己测试一下) : 
注意在测试连接超出物理核心数后, docker的性能开始严重下降. (可能有优化手段解决这个问题) 
TPS                      16连接IP,             16连接UNIX SOCK,  48连接UNIX SOCK,  96连接UNIX SOCK
docker DNAT               29662
docker                    174089.814292          257437.255033    265112.234836     180037.521722 
kvm                       58692.023756           62217.477740     166212.113952     162729.867472 
本机                      185341.577666          271232.160555    335530.912484     303621.978815


宿主机内核 : 
[root@db-172-16-3-221 ~]# uname -r
2.6.32-431.el6.x86_64

docker版本 : 
[root@db-172-16-3-221 ~]# docker info
Containers: 1
Images: 99
Storage Driver: devicemapper
 Pool Name: docker-8:49-17826869-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 1455.9 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 3.4 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.el6.x86_64

本地的images如下 : 
[root@db-172-16-3-221 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
postgres            9.4-beta3           68b6ddf9ca08        47 hours ago        213.6 MB
postgres            9.4                 68b6ddf9ca08        47 hours ago        213.6 MB
postgres            9                   935836384c52        47 hours ago        212.9 MB
postgres            latest              935836384c52        47 hours ago        212.9 MB
postgres            9.3                 935836384c52        47 hours ago        212.9 MB
postgres            9.3.5               935836384c52        47 hours ago        212.9 MB
postgres            9.2                 2a9ab0b9fa56        47 hours ago        212.7 MB
postgres            9.2.9               2a9ab0b9fa56        47 hours ago        212.7 MB
postgres            9.1.14              ee60947f6805        47 hours ago        212.1 MB
postgres            9.1                 ee60947f6805        47 hours ago        212.1 MB
postgres            9.0.18              f29be88283f6        47 hours ago        211.5 MB
postgres            9.0                 f29be88283f6        47 hours ago        211.5 MB
postgres            8                   c57c14beb696        47 hours ago        211 MB
postgres            8.4.22              c57c14beb696        47 hours ago        211 MB
postgres            8.4                 c57c14beb696        47 hours ago        211 MB
postgres            9.4-beta2           bf872395e1d4        2 weeks ago         213.6 MB

我们可以看看一个image的网络配置 :
[root@db-172-16-3-221 ~]# docker inspect postgres:9.3.5
[{
    "Architecture": "amd64",
    "Author": "",
    "Comment": "",
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "postgres"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": [
            "/docker-entrypoint.sh"
        ],
        "Env": [
            "PATH=/usr/lib/postgresql/9.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "LANG=en_US.utf8",
            "PG_MAJOR=9.3",
            "PG_VERSION=9.3.5-1.pgdg70+1",
            "PGDATA=/var/lib/postgresql/data"
        ],
        "ExposedPorts": {
            "5432/tcp": {}
        },
        "Hostname": "39d2c877bc4f",
        "Image": "15d042248df39ca896223c9e75f0f4541996f2b52030f1f8e6619cf18f77e395",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": [],
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "Volumes": {
            "/var/lib/postgresql/data": {}
        },
        "WorkingDir": ""
    },
    "Container": "977043cde52cd15e070d71a67fbd8e2ec908af49123f3f773f71cda2061e9f44",
    "ContainerConfig": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/bin/sh",
            "-c",
            "#(nop) CMD [postgres]"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": [
            "/docker-entrypoint.sh"
        ],
        "Env": [
            "PATH=/usr/lib/postgresql/9.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "LANG=en_US.utf8",
            "PG_MAJOR=9.3",
            "PG_VERSION=9.3.5-1.pgdg70+1",
            "PGDATA=/var/lib/postgresql/data"
        ],
        "ExposedPorts": {
            "5432/tcp": {}
        },
        "Hostname": "39d2c877bc4f",
        "Image": "15d042248df39ca896223c9e75f0f4541996f2b52030f1f8e6619cf18f77e395",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": [],
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "Volumes": {
            "/var/lib/postgresql/data": {}
        },
        "WorkingDir": ""
    },
    "Created": "2014-10-21T05:54:39.659381225Z",
    "DockerVersion": "1.2.0",
    "Id": "935836384c524aafc0ac1c05246002c9c93343f0b4283a34e77a5f92f97f9a7c",
    "Os": "linux",
    "Parent": "15d042248df39ca896223c9e75f0f4541996f2b52030f1f8e6619cf18f77e395",
    "Size": 0
}

启动一个container, 使用-P将端口映射出来.
[root@db-172-16-3-221 ~]# docker run -d -P postgres:9.3.5
[root@db-172-16-3-221 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
786d815d71b0        postgres:9          /docker-entrypoint.s   2 hours ago         Up 2 hours          0.0.0.0:49155->5432/tcp   suspicious_wright   


这个时候会自动创建nat转换条目, 可以使用iptables-save命令查看, 如下有一台DNAT的规则是端口49155的转发 : 
[root@db-172-16-3-221 ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Oct 23 14:00:48 2014
*nat
:PREROUTING ACCEPT [109:52442]
:POSTROUTING ACCEPT [90:4680]
:OUTPUT ACCEPT [90:4680]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER 
-A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE 
-A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE 
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER 
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 49155 -j DNAT --to-destination 172.17.0.4:5432 
COMMIT
# Completed on Thu Oct 23 14:00:48 2014


同时查看这个container的网络, 也就是说, 外部可以通过宿主机的 49155  端口访问这个container的postgresql数据库.
宿主机本地则可以通过127.0.0.1: 49155  或 172.17.0.4:5432来访问.
问题来了 : 
通过nat访问的性能和直接访问的性能差太多了.

   "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "IPAddress": "172.17.0.4",
        "IPPrefixLen": 16,
        "PortMapping": null,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "49155"
                }
            ]
        }

详细 : 
[root@db-172-16-3-221 ~]# docker inspect 786d815d71b0
[{
    "Args": [
        "postgres"
    ],
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "postgres"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": [
            "/docker-entrypoint.sh"
        ],
        "Env": [
            "PATH=/usr/lib/postgresql/9.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "LANG=en_US.utf8",
            "PG_MAJOR=9.3",
            "PG_VERSION=9.3.5-1.pgdg70+1",
            "PGDATA=/var/lib/postgresql/data"
        ],
        "ExposedPorts": {
            "5432/tcp": {}
        },
        "Hostname": "786d815d71b0",
        "Image": "postgres:9.3.5",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "Volumes": {
            "/var/lib/postgresql/data": {}
        },
        "WorkingDir": ""
    },
    "Created": "2014-10-23T02:51:06.152941964Z",
    "Driver": "devicemapper",
    "ExecDriver": "native-0.2",
    "HostConfig": {
        "Binds": null,
        "ContainerIDFile": "",
        "Dns": null,
        "DnsSearch": null,
        "Links": null,
        "LxcConf": [],
        "NetworkMode": "bridge",
        "PortBindings": {},
        "Privileged": false,
        "PublishAllPorts": true,
        "VolumesFrom": null
    },
    "HostnamePath": "/var/lib/docker/containers/786d815d71b0dca10042e73842634483158811a9c54509e58d7a1d2afa6fd94d/hostname",
    "HostsPath": "/var/lib/docker/containers/786d815d71b0dca10042e73842634483158811a9c54509e58d7a1d2afa6fd94d/hosts",
    "Id": "786d815d71b0dca10042e73842634483158811a9c54509e58d7a1d2afa6fd94d",
    "Image": "935836384c524aafc0ac1c05246002c9c93343f0b4283a34e77a5f92f97f9a7c",
    "MountLabel": "",
    "Name": "/suspicious_wright",
    "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "IPAddress": "172.17.0.4",
        "IPPrefixLen": 16,
        "PortMapping": null,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "49155"
                }
            ]
        }
    },
    "Path": "/docker-entrypoint.sh",
    "ProcessLabel": "",
    "ResolvConfPath": "/etc/resolv.conf",
    "State": {
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "Paused": false,
        "Pid": 22251,
        "Running": true,
        "StartedAt": "2014-10-23T02:51:06.931436989Z"
    },
    "Volumes": {
        "/var/lib/postgresql/data": "/var/lib/docker/vfs/dir/8df8643eb4f255471b744a957a168fb9e1e57b1169ade6fba8b5f3a912681e88"
    },
    "VolumesRW": {
        "/var/lib/postgresql/data": true
    }
}


这个启动container后为container创建的接口.
# ifconfig
veth2d30  Link encap:Ethernet  HWaddr 42:9B:9F:1F:09:B0  
          inet6 addr: fe80::409b:9fff:fe1f:9b0/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:6289977 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6290136 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:786242516 (749.8 MiB)  TX bytes:597549874 (569.8 MiB)
[root@db-172-16-3-221 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.429b9f1f09b0       no              veth2d30


测试如下, 执行select 1; : 
[root@db-172-16-3-221 ~]# cd
[root@db-172-16-3-221 ~]# psql -V
psql (PostgreSQL) 9.3.5
[root@db-172-16-3-221 ~]# vi test.sql
select 1;

通过NAT转换的性能 : 
[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h 127.0.0.1 -p 49155 -U postgres -c 16 -j 4 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 889901
tps = 29662.517330 (including connections establishing)
tps = 29677.580497 (excluding connections establishing)
statement latencies in milliseconds:
        0.537902        select 1;

直接连接container访问的性能 : 
显然使用nat转换带来的性能损失非常大, TPS下降到了17%.

[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h 172.17.0.4 -p 5432 -U postgres -c 16 -j 4 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 5222786
tps = 174089.814292 (including connections establishing)
tps = 174177.646184 (excluding connections establishing)
statement latencies in milliseconds:
        0.090595        select 1;

另外 , 附上直接访问宿主机本地的数据库的性能, 我们看到docker性能损失极少(约6%) : 
相比KVM虚拟化, CPU损耗方面, DOCKER的性能损耗确实非常低, KVM参考 : 

[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h 127.0.0.1 -p 5432 -U postgres -c 16 -j 4 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 5560383
tps = 185341.577666 (including connections establishing)
tps = 185435.133589 (excluding connections establishing)
statement latencies in milliseconds:
        0.084922        select 1;

在同一台宿主机下KVM虚拟机测试结果如下(kvm VCPU=48, 宿主机48核) : 
宿主机CPU : 

processor       : 47
vendor_id       : GenuineIntel
cpu family      : 6
model           : 46
model name      : Intel(R) Xeon(R) CPU           E7540  @ 2.00GHz
stepping        : 6
cpu MHz         : 1995.262
cache size      : 18432 KB
physical id     : 3
siblings        : 12
core id         : 11
cpu cores       : 6
apicid          : 119
initial apicid  : 119
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 x2apic popcnt lahf_lm ida epb dts tpr_shadow vnmi flexpriority ept vpid
bogomips        : 3989.44
clflush size    : 64
cache_alignment : 64
address sizes   : 44 bits physical, 48 bits virtual
power management:

4SOCKET
6CORE
2TH

共48核心
虚拟机CPU(问题可能出自这里) : 

processor       : 47
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
cpu MHz         : 1995.047
cache size      : 4096 KB
physical id     : 3
siblings        : 12
core id         : 5
cpu cores       : 6
apicid          : 59
initial apicid  : 59
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc unfair_spinlock pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 3990.09
clflush size    : 64
cache_alignment : 64
address sizes   : 44 bits physical, 48 bits virtual
power management:

KVM进程 : 
qemu     29307     1 55 15:57 ?        00:00:07 /usr/libexec/qemu-kvm -name test1 -S -M rhel6.5.0 -cpu Nehalem,+rdtscp,+x2apic,+dca,+pdcm,+xtpr,+tm2,+est,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -enable-kvm -m 8192 -realtime mlock=off -smp 48,sockets=4,cores=6,threads=2 -uuid 073dbc6f-f376-2c96-6323-e0cc488eda68 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/test1.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/lib/libvirt/images/test1.img,if=none,id=drive-virtio-disk0,format=raw,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=21,id=hostnet0,vhost=on,vhostfd=22 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:d6:b2:07,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6

KVM性能(损耗68%) : 
[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h 172.17.42.222 -p 5432 -U postgres -c 16 -j 4 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 1760790
tps = 58692.023756 (including connections establishing)
tps = 58743.201940 (excluding connections establishing)
statement latencies in milliseconds:
        0.271061        select 1;

计算密集型的话docker有明显优势.

最后再来一组unix socket的测试结果 : 
本机 : 

[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h /data01/pgdata/pg_root -p 5432 -U postgres -c 16 -j 4 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 8137047
tps = 271232.160555 (including connections establishing)
tps = 271348.434446 (excluding connections establishing)
statement latencies in milliseconds:
        0.057746        select 1;


docker (性能损耗5%)
[root@db-172-16-3-221 ~]# docker run -t -i postgres:9.3.5 /bin/bash
root@48f8decd3ccb:/# more docker-entrypoint.sh 
#!/bin/bash
set -e

if [ "$1" = 'postgres' ]; then
        chown -R postgres "$PGDATA"

        if [ -z "$(ls -A "$PGDATA")" ]; then
                gosu postgres initdb

                sed -ri "s/^#(listen_addresses\s*=\s*)\S+/\1'*'/" "$PGDATA"/postgresql.conf

                { echo; echo 'host all all 0.0.0.0/0 trust'; } >> "$PGDATA"/pg_hba.conf

                if [ -d /docker-entrypoint-initdb.d ]; then
                        for f in /docker-entrypoint-initdb.d/*.sh; do
                                [ -f "$f" ] && . "$f"
                        done
                fi
        fi

        exec gosu postgres "$@"
fi

exec "$@"
root@48f8decd3ccb:/# ./docker-entrypoint.sh postgres
root@48f8decd3ccb:/# echo "select 1;" > ./test.sql
root@48f8decd3ccb:/# pgbench -M prepared -n -r -f ./test.sql -h /var/run/postgresql -p 5432 -U postgres -c 16 -j 4 -T 30 postgres   transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 7723173
tps = 257437.255033 (including connections establishing)
tps = 257554.115083 (excluding connections establishing)
statement latencies in milliseconds:
        0.060943        select 1;


kvm (性能损耗77%)
postgres@localhost-> pgbench -M prepared -n -r -f ./test.sql -h /home/postgres/pgdata/pg_root -p 5432 -U postgres -c 16 -j 4 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 1866859
tps = 62217.477740 (including connections establishing)
tps = 62248.936343 (excluding connections establishing)
statement latencies in milliseconds:
        0.254873        select 1;


加大连接后, kvm有性能提升. 但是到顶也只能达到16.6W左右, 性能损失46.4%左右.
DOCKER的话, 超出核数后性能下降严重, 在达到物理核限制极限时, 损失12.7% 左右. 
KVM加大连接(CPU使用率1200%) : 

top - 17:54:56 up 43 days,  7:58,  3 users,  load average: 4.72, 1.43, 0.53
Tasks: 1115 total,   1 running, 1114 sleeping,   0 stopped,   0 zombie
Cpu(s): 24.9%us,  0.2%sy,  0.0%ni, 74.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  99045564k total, 13146680k used, 85898884k free,   272772k buffers
Swap:  1048568k total,        0k used,  1048568k free,  9688200k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
30008 qemu      20   0 11.8g 815m 5828 S 1204.4  0.8  20:56.29 /usr/libexec/qemu-kvm -name test1 -S -M rhel6.5.0 -cpu Nehalem,+rdtsc

postgres@localhost-> pgbench -M prepared -n -r -f ./test.sql -h /home/postgres/pgdata/pg_root -p 5432 -U postgres -c 48 -j 12 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 48
number of threads: 12
duration: 30 s
number of transactions actually processed: 4988101
tps = 166212.113952 (including connections establishing)
tps = 166348.747712 (excluding connections establishing)
statement latencies in milliseconds:
        0.285856        select 1;

postgres@localhost-> pgbench -M prepared -n -r -f ./test.sql -h /home/postgres/pgdata/pg_root -p 5432 -U postgres -c 96 -j 12 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 96
number of threads: 12
duration: 30 s
number of transactions actually processed: 4885569
tps = 162729.867472 (including connections establishing)
tps = 163017.799292 (excluding connections establishing)
statement latencies in milliseconds:
        0.585876        select 1;


本地加大连接 : 
[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h /data01/pgdata/pg_root -p 5432 -U postgres -c 48 -j 12 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 48
number of threads: 12
duration: 30 s
number of transactions actually processed: 10068364
tps = 335530.912484 (including connections establishing)
tps = 335757.764533 (excluding connections establishing)
statement latencies in milliseconds:
        0.141343        select 1;

[root@db-172-16-3-221 ~]# pgbench -M prepared -n -r -f ./test.sql -h /data01/pgdata/pg_root -p 5432 -U postgres -c 96 -j 12 -T 30 postgres
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 96
number of threads: 12
duration: 30 s
number of transactions actually processed: 9113013
tps = 303621.978815 (including connections establishing)
tps = 304050.332175 (excluding connections establishing)
statement latencies in milliseconds:
        0.313762        select 1;


docker加大连接 : 
root@48f8decd3ccb:/# pgbench -M prepared -n -r -f ./test.sql -h /var/run/postgresql -p 5432 -U postgres -c 96 -j 12 -T 30 postgres 
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 96
number of threads: 12
duration: 30 s
number of transactions actually processed: 5403085
tps = 180037.521722 (including connections establishing)
tps = 180248.827373 (excluding connections establishing)
statement latencies in milliseconds:
        0.527325        select 1;

root@48f8decd3ccb:/# pgbench -M prepared -n -r -f ./test.sql -h /var/run/postgresql -p 5432 -U postgres -c 40 -j 10 -T 30 postgres 
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 40
number of threads: 10
duration: 30 s
number of transactions actually processed: 7955103
tps = 265112.234836 (including connections establishing)
tps = 265278.332675 (excluding connections establishing)
statement latencies in milliseconds:
        0.147930        select 1;


[参考]

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
相关文章
|
22天前
|
关系型数据库 MySQL 数据库
docker 安装mysql(踩坑踩得想哭 详细解决教程)ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using pa
docker 安装mysql(踩坑踩得想哭 详细解决教程)ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using pa
27 1
|
2月前
|
PHP Docker 容器
docker基本命令network的使用以及基本命令
docker基本命令network的使用以及基本命令
21 0
|
3月前
|
KVM 虚拟化 Android开发
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
66 1
|
5月前
|
PHP Docker 容器
一文解读Docker 网络Network
一文解读Docker 网络Network
|
9月前
|
负载均衡 安全 Linux
【Docker】Docker network之bridge、host、none、container以及自定义网络的详细讲解
【Docker】Docker network之bridge、host、none、container以及自定义网络的详细讲解
336 0
|
9月前
|
安全 Linux 虚拟化
【Docker】Docker中network的概要、常用命令、网络模式以及底层ip和容器映射变化的详细讲解
【Docker】Docker中network的概要、常用命令、网络模式以及底层ip和容器映射变化的详细讲解
1297 0
|
9月前
|
Nacos Docker 容器
解决docker启动时报‘Error response from daemon: network xxx not found‘问题
解决docker启动时报‘Error response from daemon: network xxx not found‘问题
1375 0
|
Docker 容器
docker network命令
docker network命令
74 0
|
存储 Kubernetes Linux
From Docker to Kubernetes(二)- Docker Network
From Docker to Kubernetes(二)- Docker Network
From Docker to Kubernetes(二)- Docker Network
|
Cloud Native Java Linux
【云原生 | 16】Docker网络之NetWork网络隔离
每个容器启动时会创建一对虚拟网卡,一个网卡在容器内的虚拟空间内,一个在主机的docker网桥上,然后网卡一连接网卡二,网卡二连接网桥。其他容器的虚拟网卡也都连接到网桥(三层交换)上,就可以使不同的容器之间互相通信了
290 0
【云原生 | 16】Docker网络之NetWork网络隔离