1. 准备测试环境
在进行性能测试前,需确保Linux环境与生产环境一致(包括硬件配置、Node.js版本、依赖库版本)。可通过node -v确认Node.js版本,使用uname -a检查Linux内核版本。安装必要工具(如wrk、autocannon):
# 安装wrk(以Ubuntu为例)
sudo apt update && sudo apt install -y build-essential libssl-dev git
git clone https://github.com/wg/wrk.git && cd wrk
make && sudo cp wrk /usr/local/bin/
# 安装autocannon
npm install -g autocannon
这些步骤可避免环境差异导致的测试结果偏差。
2. 选择性能测试工具
根据测试目标选择工具:
wrk(现代、高并发,支持Lua脚本扩展)、autocannon(易用,支持HTTP/2)、ApacheBench(ab)(简单,适合快速测试);perf_hooks(Node.js内置,测量代码块执行时间)、V8 Profiler(分析CPU热点函数);top(实时查看CPU/内存占用)、vmstat(监控系统整体性能)、iostat(分析磁盘I/O)。3. 执行负载测试
以wrk和autocannon为例,模拟高并发请求:
wrk -t12 -c400 -d30s --latency http://localhost:3000/api endpoint
参数说明:-t12(12个线程)、-c400(400个并发连接)、-d30s(持续30秒)、--latency(显示延迟分布)。autocannon -c 100 -d 50 -p 10 http://localhost:3000/api endpoint
参数说明:-c 100(100个并发)、-d 50(50秒持续时间)、-p 10(每10秒打印一次进度)。4. 进行代码级性能分析
const { performance } = require('perf_hooks');
const start = performance.now();
// 模拟耗时操作(如数据库查询、复杂计算)
for (let i = 0; i < 1000000; i++) {}
const end = performance.now();
console.log(`耗时:${end - start} 毫秒`);
const profiler = require('v8-profiler-next');
const snapshot = profiler.takeSnapshot('CPU Profile');
snapshot.export((err, result) => {
if (err) throw err;
require('fs').writeFileSync('cpu-profile.json', result);
console.log('CPU快照已保存为cpu-profile.json');
});
使用speedscope工具打开cpu-profile.json,查看占用CPU时间最多的函数,定位性能瓶颈。5. 监控系统资源
测试时,通过以下命令实时监控系统资源使用情况:
M键按内存排序,按P键按CPU排序;6. 分析结果与优化
async/await或Promise避免阻塞事件循环;stream模块,减少内存占用。