前言
原料
开发框架: eggjs sequlize mysql
服务器: 阿里云 1核 1GB 1Mbps(最低配)
测试工具: jmeter
注册接口编写
async login(ctx) { // 登录 ctx.validate(userRule); // 用户校验 const { name, passwd } = ctx.request.body; let user = await ctx.model.User.findOne({ where: { name: name } }); if (user) { ctx.error(user.passwd === passwd, "密码错误或昵称已存在", 10001); } else { user = await ctx.model.User.create({ name: name, passwd: passwd }); } // 生成token和session并存储 const token = await ctx.service.token.genToken(user.id, ctx.request.ip); await app.redis.set(`${app.options.sessionPrefix}:${token.id}`, JSON.stringify({ user: user.id, token: token.id })); ctx.cookies.set("access_token", token.id); ctx.jsonBody = user; } |
接口逻辑很简单,可见接口中仅有4个I/O操作,下面的性能测试就是针对这个接口.
安装并配置jmeter
安装jmeter(启动时需要java环境,自行安装)下载传送门
解压jmeter后,启动脚本路径为 apache-jmeter-3.3/bin/jmeter.bat
启动成功后界面
下面开始配置测试用例
配置并发数入口
配置监听器
添加http请求入口/cookie/header等信息
配置好后如下图所示
接下来点击开始按钮进行测试.
测试结果及其分析
首先看下图形测试结果:
图表底部参数的含义如下:
样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。
聚合报告结果:
部分参数解释:
Samples: 本次场景中一共完成了多少个Transaction
Average: 平均响应时间
Median: 统计意义上面的响应时间的中值
90% Line: 所有transaction中90%的transaction的响应时间都小于xx
Min: 最小响应时间
Max: 最大响应时间
PS: 以上时间的单位均为ms
Error: 出错率
Troughput: 吞吐量,单位:transaction/sec
KB/sec: 以流量做衡量的吞吐量
服务器内存/cpu监控:
总结:
可以看到在2000并发的情况下,Node应用并没有跑死,只是响应变得比较慢(机器配置有一定原因)
通过服务器状态的监控发现cpu资源的消耗低于内存的消耗(个人觉得应该是Node在处理请求时,异步I/O导致了内存消耗比较高)
感觉用户量不是很大的应用Node应该还是能满足需求的(把集群用上)
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。