Nodejs 性能测试报告
Nodejs 性能测试报告
日 期:2014-11-12
测试目的
测试页面的负载量
测试范围
express +ejs
helloworld 界面
测试环境
测试准备
数据准备 无参数化或需要特殊处理字段。
脚本准备
LR编写测试脚本。
Node 安装
npm install pm2 -g --unsafe-perm (安装)
cd /data/node/resources/node-serve
npm install express
npm install ejs
npm kill
pm2 start start.js -i 8 (启动8个线程)
测试结果如下:
总结:
- Node启单线程tps平均610笔/s,启8线程跑tps可达3891笔/s。
- 建议Node服务启动线程数与服务器核数一致。
- 主要瓶颈在node消耗cpu较大上,无论node迁移到单独虚拟机,还是和Jetty同台虚拟机,cpu都基本耗尽,cpu负载在8+。
测试详情
数据展示页-100vu-Node单线程
Node启单个线程(jetty+nginx+Node在一台虚拟机),模拟100用户压测TPS平均638笔/s,Cpu负载较小,node进程cpu用尽,其他资源使用较小,详细见下图:
数据展示页-200vu-Node8线程
Node启8个线程(jetty+nginx+Node在一台虚拟机),模拟200用户压测TPS平均3891笔/s,Cpu负载9,cpu使用充分(无idle)主要是Node进程消耗cpu,其他资源使用较小,详细见下图:
数据展示页-200vu-8线程-单Node
Node单台虚拟机测试200用户,TPS平均4016笔/s,平均响应时间0.049s,服务器182负载较小,cpu_usr 12%,网络流量recv左右;node服务器cpu基本用光,cpu负载8。
结论
nodejs 在内存和响应速度上的表现都非常好,但是cpu占用过高了,如果pm2 只开启6个进程,cpu的占用率会在85%以下,那么问题来了,怎么降低 CPU的使用率,在大型的项目中是怎么处理的?
Nodejs 性能测试报告
日期:2014-11-12
测试目的
测试页面的负载量。
测试范围
- 框架: Express + EJS
- 界面: HelloWorld
测试环境
- 服务器端: [服务器端配置图]
- 客户端: [客户端配置图]
- 网络环境: [网络环境配置图]
测试准备
数据准备
- 无参数化或需要特殊处理字段。
脚本准备
LR编写测试脚本。
Node 安装
npm install pm2 -g --unsafe-perm # 安装
cd /data/node/resources/node-serve
npm install express
npm install ejs
npm kill
启动8个线程
pm2 start start.js -i 8
测试结果
总结:
- Node 启单线程 TPS 平均 610 笔/s,启 8 线程跑 TPS 可达 3891 笔/s。
- 建议 Node 服务启动线程数与服务器核数一致。
- 主要瓶颈在 node 消耗 CPU 较大上,无论 node 迁移到单独虚拟机,还是和 Jetty 同台虚拟机,CPU 都基本耗尽,CPU 负载在 8+。
测试详情
数据展示页 - 100vu - Node 单线程
Node 启单个线程(Jetty + Nginx + Node 在一台虚拟机),模拟 100 用户压测 TPS 平均 638 笔/s,CPU 负载较小,Node 进程 CPU 用尽,其他资源使用较小,详细见下图:
数据展示页 - 200vu - Node 8线程
Node 启 8 个线程(Jetty + Nginx + Node 在一台虚拟机),模拟 200 用户压测 TPS 平均 3891 笔/s,CPU 负载 9,CPU 使用充分(无 idle),主要是 Node 进程消耗 CPU,其他资源使用较小,详细见下图:
数据展示页 - 200vu - 8线程 - 单Node
Node 单台虚拟机测试 200 用户,TPS 平均 4016 笔/s,平均响应时间 0.049s,服务器 182 负载较小,CPU_usr 12%,网络流量 recv 左右;Node 服务器 CPU 基本用光,CPU 负载 8。
结论
Node.js 在内存和响应速度上的表现都非常好,但是 CPU 占用过高了。如果 PM2 只开启 6 个进程,CPU 的占用率会在 85% 以下。那么问题来了,如何降低 CPU 的使用率?在大型项目中是如何处理的?
原文地址: Nodejs 性能测试报告
根据提供的测试报告内容,我们可以总结出Node.js在不同线程数下的性能表现。这里提供一些改进措施来优化CPU使用率,并附带一个简单的示例代码来展示如何使用pm2
启动多线程。
改进措施
- 调整线程数:确保启动的线程数与服务器的核心数相匹配。
- 优化代码逻辑:减少不必要的计算、循环等,提高代码效率。
- 异步操作:使用异步函数避免阻塞主线程,例如使用
async
/await
。 - 减少依赖:减少不必要的第三方库,减少内存和CPU开销。
- 使用Worker Threads:对于CPU密集型任务,可以考虑使用Node.js内置的
worker_threads
模块。
示例代码
以下是使用pm2
启动多个线程的简单示例:
# 安装PM2
npm install pm2 -g
# 创建一个简单的Express应用
cat > app.js <<EOF
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
EOF
# 使用PM2启动8个线程
pm2 start app.js -i 8
解释
- 安装PM2:全局安装PM2,用于管理Node.js应用。
- 创建应用:创建一个简单的Express应用,监听3000端口。
- 启动应用:使用
pm2 start
命令启动应用,并指定-i 8
来启动8个线程。
通过这种方式,你可以更好地利用服务器的多核心处理器,从而提高Node.js应用的性能。在实际生产环境中,还需要根据具体业务需求进行更多的性能调优和监控。