我有一个问题。我最近在Spring上设计了一个java应用程序,它与数据库一起工作。我决定进行压力测试。应用程序和数据库都驻留在虚拟Debian机器上。我用gatling测试了它,这就是我得到的:
请求数600(OK = 600 KO = 0)
最小响应时间12(OK = 12 KO = - )
最大响应时间159(OK = 159 KO = - )
平均响应时间21(OK = 21 KO = - )
std偏差13(OK = 13 KO = - )
响应时间第50百分位数17(OK = 17 KO = - )
响应时间第75百分位数22(OK = 22 KO = - )
表示请求/秒10.01(OK = 10.01 KO = - )
t< 800毫秒600(100%)
800 ms< t< 5000毫秒0(0%)
t> 5000毫秒0(0%)
失败0(0%)
到目前为止,这么好。 Ater,我决定将数据库和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
现在,在用gatling测试后,我得到了以下结果:
----全球资讯----------------------------------------- ---------------
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容器很像本机处理,它们不应该运行那么慢。