为什么使用docker容器的系统会有这样的开销?

我有一个下面的问题。 我最近在Spring上devise了一个Java应用程序,它可以与数据库一起工作。 我决定进行压力testing。 应用程序和数据库都驻留在虚拟的Debian机器上。 我用gatlingtesting它,这是我得到的:

请求数600(OK = 600 KO = 0)

最小响应时间12(OK = 12 KO = – )

最大响应时间159(OK = 159 KO = – )

平均响应时间21(OK = 21 KO = – )

标准偏差13(OK = 13 KO = – )

响应时间第50百分位数17(OK = 17 KO = – )

响应时间第75百分位数22(OK = 22 KO = – )

意思请求/秒10.01(OK = 10.01 KO = – )

t <800 ms 600(100%)

800 ms <t <5000 ms 0(0%)

t> 5000 ms 0(0%)

失败0(0%)

到现在为止还挺好。 在那之前,我决定把数据库和jar放到两个容器中。 这是一个docker-compose.yml示例:

prototype-db: build: prototype-db volumes: - ./prototype-db/data:/var/lib/mysql:rw - ./prototype-db/scripts:/docker-entrypoint-initdb.d:ro ports: - "3306" prototype: image: openjdk:8 command: bash -c "cd /deploy && java -jar application.jar" volumes: - ./application/target:/deploy depends_on: - prototype-db ports: - "8080:8080" dns: - 172.16.10.1 - 172.16.10.2 

Dockerfile看起来像这样:

 FROM mysql:5.7.15 ENV MYSQL_DATABASE=document \ MYSQL_ROOT_PASSWORD=root \ MYSQL_USER=testuser \ MYSQL_PASSWORD=12345 EXPOSE 3306 

现在,用gatlingtesting之后,我得到了以下结果:

—-全球信息——————————————– ————

 request count 6000 (OK=3946 KO=2054 ) min response time 0 (OK=124 KO=0 ) max response time 18336 (OK=18336 KO=77 ) mean response time 5021 (OK=7630 KO=10 ) std deviation 4136 (OK=2478 KO=9 ) response time 50th percentile 6516 (OK=8694 KO=9 ) response time 75th percentile 8732 (OK=8905 KO=14 ) mean requests/sec 87.433 (OK=57.502 KO=29.931) 

—-响应时间分布——————————————- —–

 t < 800 ms 65 ( 1%) 800 ms < t < 5000 ms 532 ( 9%) t > 5000 ms 3349 ( 56%) failed 2054 ( 34%) 

—-错误——————————————— ———————–

 java.io.IOException: Remotely closed 1494 (72.74%) status.find.is(200), but actually found 500 560 (27.26%) 

这真是太神奇了 – 平均响应时间大大超出了许多错误,但是这个docker撰写系统运行在相同的虚拟debian机器上。 什么可能会导致这样的开销,我认为docker集装箱很像本地处理,他们不应该运行缓慢。