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个线程)

测试结果如下: Snip20141113_31.png

总结:

  • 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用尽,其他资源使用较小,详细见下图: Snip20141113_38.png

数据展示页-200vu-Node8线程

Node启8个线程(jetty+nginx+Node在一台虚拟机),模拟200用户压测TPS平均3891笔/s,Cpu负载9,cpu使用充分(无idle)主要是Node进程消耗cpu,其他资源使用较小,详细见下图: Snip20141113_34.png

数据展示页-200vu-8线程-单Node

Node单台虚拟机测试200用户,TPS平均4016笔/s,平均响应时间0.049s,服务器182负载较小,cpu_usr 12%,网络流量recv左右;node服务器cpu基本用光,cpu负载8。

Snip20141113_36.png

Snip20141113_37.png

结论

nodejs 在内存和响应速度上的表现都非常好,但是cpu占用过高了,如果pm2 只开启6个进程,cpu的占用率会在85%以下,那么问题来了,怎么降低 CPU的使用率,在大型的项目中是怎么处理的?

原文地址: http://www.jianshu.com/p/0be1f79d719f


3 回复

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启动多线程。

改进措施

  1. 调整线程数:确保启动的线程数与服务器的核心数相匹配。
  2. 优化代码逻辑:减少不必要的计算、循环等,提高代码效率。
  3. 异步操作:使用异步函数避免阻塞主线程,例如使用async/await
  4. 减少依赖:减少不必要的第三方库,减少内存和CPU开销。
  5. 使用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

解释

  1. 安装PM2:全局安装PM2,用于管理Node.js应用。
  2. 创建应用:创建一个简单的Express应用,监听3000端口。
  3. 启动应用:使用pm2 start命令启动应用,并指定-i 8来启动8个线程。

通过这种方式,你可以更好地利用服务器的多核心处理器,从而提高Node.js应用的性能。在实际生产环境中,还需要根据具体业务需求进行更多的性能调优和监控。

回到顶部