- 这次使用的压测工具名为k6,选它的原因只有两个字:简单
- 在执行压测的电脑上,确保docker可以正常使用
- 新建名为k6-vt-docker.js的文件,内容如下,可见非常简单,发请求再校验响应,只要返回码是200,并且body大小大于0就算一次成功,要注意的事两个参数,其中vus是并发数,duration是测试持续时间,可见这里设置的是模拟30用户并发请求,持续时间是60秒
import http from 'k6/http';import { sleep, check } from 'k6';export let options = {vus: 30,duration: '60s',};export default function () {let r = Math.floor(Math.random() * 6) + 1;const res = http.get(`http://192.168.0.1:8080/vt/persons/${r}`);check(res, {'is status 200': (res) => res.status === 200,'body size is > 0': (r) => r.body.length > 0,});sleep(1);}
- 一行命令即可开始压测,如下
docker run --rm -i loadimpact/k6 run - < k6-vt-docker.js
- 等待一分钟,压测完成,得到以下数据

文章插图
- 这里将几个重要参数介绍一下
- checks : 通过率,如果满足返回码200且包体大小大于0的条件,就表示本次请求成功,这里显示100.00%,表示全部通过
- http_req_waiting:等待响应的事件,这里avg=33.83ms,表示平均等待时间为33.83毫秒
- http_reqs:每秒处理请求数,即常说的QPS,这里是28个每秒
- 接下来将并发数调整为300(即vue参数),如下图

文章插图
- 再次压测,得到结果如下,并发数涨了10倍,QPS也涨了10倍,很完美的线程提升,不过平均等待时间略涨
文章插图
- 再来个狠的,并发数一口暴涨到5000试试,如下图,这么高的并发,已经无法保障100%的成功率了,好在95%也不低,另外平均等待时间从39毫秒暴涨到6.26秒,至于QPS当然不会太高,仅比300并发的时候高了百分之五十
文章插图
- 操作步骤和刚才差不多,只是要修改脚本中的接口地址,如下所示
import http from 'k6/http';import { sleep, check } from 'k6';export let options = {vus: 30,duration: '60s',};export default function () {let r = Math.floor(Math.random() * 6) + 1;const res = http.get(`http://192.168.0.1:8080/pool/persons/${r}`);check(res, {'is status 200': (res) => res.status === 200,'body size is > 0': (r) => r.body.length > 0,});sleep(1);}
- 30并发的压测结果如下,和使用虚拟线程并无区别
文章插图
- 300并发压测结果如下,和使用虚拟线程并无区别

文章插图
- 5000并发压测结果如下,和虚拟线程相比,平均等待时间略长,QPS略低,但是整体上差别不大

文章插图
小结
- 在响应式web服务中,并且关联的数据库操作也是响应式的,相比传统的线程池模型,虚拟线程并未带来明显收益
- 不甘心啊,接下来就换成SpringBoot应用,模拟咱们日常开发最常见的数据库访问场景,看看相比之下,差距有多大?
经验总结扩展阅读
- 华为P50支持几倍变焦_华为P50有光学防抖吗
- oppo手机虚拟按键在哪里设置 oppo虚拟按键怎么设置
- 小米11Ultra支持变焦吗_支持多少倍变焦
- 属马和属马人缘份发展趋势 中等婚配多支持
- 虚拟化_Vmware——敬请期待!
- 虚拟化_Xen——敬请期待!
- 小米11支持人脸支付吗_小米11支持人脸识别吗
- 如何用Virtualbox搭建一个虚拟机
- 华为nova9支持NFC吗_华为nova9有NFC功能吗
- vulnhub靶场之EMPIRE