怎样对流媒体进行压力测试_对node工程进行压力测试与性能分析「干货」

本文介绍了如何使用autocannon进行压力测试,并通过V8 Profiler和v8-profiler工具进行性能分析,包括CPU占用高的问题定位。通过案例展示了对Node.js工程的压力测试过程,以及如何生成和解析性能报告,帮助开发者优化接口性能。
摘要由CSDN通过智能技术生成
ab351664c6f9aaa914a481498ab0ed19.png

作者:小黎

转发链接:https://mp.weixin.qq.com/s/WBe7ZLoqFD9UqNusnv_IDA

前言

在系统上线前,为了看下系统能承受多大的并发和并发下的负载情况,常常会先进行了一轮压测。

曾在一个项目的压测过程中,发现服务器的cpu飚的的非常高,而tps,接口耗时、服务可用等都是正常的,这就奇了怪了,自己想了半天也没想出为啥,不得已求助了大佬,大佬说先查看 cpu processor

what?这是啥??虽然听不懂,但可以查嘛╭(╯^╰)╮,可还没等我查出来,大佬直接上手,一顿骚操作,便找出了原因~ 这着实让自己汗颜啊,内功远远不足啊,回来网上找了资料,恶补一把如何分析node工程中的性能问题。

这里给大家分享我学习到的各种工具和方法。

样例项目

为了便于演示,写了个简单的小例子

// app.jsconst crypto = require('crypto')const Koa = require('koa')const Router = require('koa-router');const app = new Koa();const router = new Router();router.get('/crypto', async(ctx, next) => {    const salt = crypto.randomBytes(128).toString('base64')    const hash = crypto.pbkdf2Sync('crypto', salt, 10000, 64, 'sha512').toString('hex')    ctx.body = { hash: hash }    console.log(hash)    ctx.status = 200    next()});let reqNum = 0router.get('/empty', async(ctx, next) => {    ctx.body = { hash: 'empty' }    reqNum++;    ctx.status = 200    next()});app.use(router.routes()).use(router.allowedMethods());app.listen(3000, () => {    console.log("listen 3000")})

基于koa2,有两个路由,一个/crypto,其中的业务逻辑是,使用crypto库对字符串加密;一个是 /empty,没有业务逻辑的接口,就是个空接口

压力测试

压力测试工具市面上有很多种,就不一一列举了,在社区看到有人推荐 autocannon ,就对这个工具做个介绍,官方的简介是 fast HTTP/1.1 benchmarking tool written in Node.js ,使用node编写的压测工具,能比wrk生成更多负载。

install

npm i autocannon -gnpm i autocannon --save

use

提供两种使用方式

  1. 命令行 autocannon -c 100 -d 5 -p 2 http://127.0.0.1:3000/test 简单快速
  2. api调用 autocannon(opts[, cb]) 便于编写脚本

关键参数有这么几个

  • -c/--connections NUM 并发连接的数量,默认10
  • -p/--pipelining NUM 每个连接的流水线请求请求数。默认1
  • -d/--duration SEC 执行的时间,单位秒
  • -m/--method METHOD 请求类型 默认GET
  • -b/--body BODY 请求报文体

还有很多参数,大家可以查看官网文档。

这个库目前只能支持一个接口压测,我写了个脚本,可以支持批量压测和生成测试报告,具体代码见文末。

report

下图是对 /empty 接口压测 autocannon -c 100 -d 5 -p 1 http://127.0.0.1:3000/empty 结果如下

01f9ae0865d6191994025bf758912e5e.png

autocannon-empty

可看到,每秒有100个链接,每个链接一个请求,持续5秒,一共产生 31k 次请求。报告分三部分,第一行表示接口的延迟,第二行表示每秒的请求数(tps),第三行表示每秒返回的字节数。那么,延迟越低,tps越高,就表示接口性能越好,因为empty 是个空接口,所以它的tps=6221还不错,响应时间也很快,我们换成 /crypto 接口在试试

fdf4ed670a62405ce57c698c821636e1.png

autocannon-crypto

立马看出差距了,这个接口tps只有77,接口耗时达到了1100ms,说明这个接口有很大的优化空间啊

生成性能文件与分析

通过压测工具我们找到了有问题的接口,那接下来,就要对接口进行剖析了,可是光看接口代码,不好分析啊,毕竟没有说服力,我们就需要一份性能报告,用数据说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值