今天心血来潮,想做下压力测试,以前重来没有试过
工具
- wrk,根据官方的介绍
wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi->core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and >kqueue.
wrk是一个现代的HTTP基准测试工具,能够在单个多核CPU上运行时产生显着的负载。它将多线程设计与可
扩展事件通知系统(如epoll和kqueue)相结合。
总之这是一个http测试工具,用法可以自行上网查询
- pm2,根据pm2的介绍我们可以使用,pm2 monit来查看性能数据,或者使用keymetrics(pm2的在线可视化性能检测工具)来监测性能,使用方法自行搜索
概念
在开始测试之前,我们需要了解一下 系统吞吐量(TPS)、用户并发量、性能测试概念和公式,我们关心的也大多都是并发量,tps,和响应时间这3者,wrk中也正好有对应三者的测试结果
我们用wrk测试了一下,可以看到在300的并发量下,持续测试10s的时间一共产生了1w个请求,平均响应时间是266ms,但是最大的已经超过了2s,tps是1k左右,但是也可以看到159个左右的请求连接超时
同时我们自己使用express搭建一个简单的服务器,使用pm2来看看硬件性能的使用情况
可以看到cpu已经满载运行,内存使用了126m
压测结束后
cpu和内存瞬间降低,表示了我们的服务器身体还是挺好的
开始测试
目标
首先我们需要定下目标,和环境,目前我使用分配了i7-4710mq的4线程和内存的4g给虚拟机,我们需要express默认主页的百万日pv,根据系统的平均并发用户数和并发数峰值如何估算这文章的算法,我们如果要实现100w的日pv那么我们需要服务器的至少要会接到15个请求每秒左右并且响应时间要小于50ms(这个是我从淘宝首页看到的)才正常但是我们的页面十分简单,我们要求平均20ms内响应90%响应时间定为36ms,那么我们服务器需要处理的并发量就是45.
总的来说,我们需要在45的并发下达到平均响应时间20ms,90%响应时间为36ms
初次测试
我们在45并发下发现我们的平均响应时间为34多ms,每秒处理1k请求,超过我们的需求
优化
当前我们是处于单进程,我们需要使用pm2 内置的负载均衡,开启多线程
我们开启了4个进程,可以看到现在的响应时间很接近20毫秒了
总结
由此做了个初略的结论,在百万级别的pv下nodejs还是可以支持的住的