alinode与node性能测试方法与分析
需求和技术指标整理
node服务在引入node性能监控过程中,需要使用alinode,为了对alinode与官方node各项性能指标的差异有进一步的认识,现开展以下调研、测试.
原理性分析
alinode是基于官方node做封装,官方解释是alinode对性能影响可以忽略.

测试方案
1、node版本
Node.js 10.16.3 on Linux 64-bit
2、Linux系统
uname -a
2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
3、 测试代码
循环:
const Benchmark = require('benchmark');
let suite = new Benchmark.Suite('foo', {});
console.log(String(Benchmark.platform));
const arr = new Array(100000).fill(1);
const arr = []
suite.add('for_normal', () => { for (let i = 0; i < arr.length; i++) { }})
.add('for正序-inTurn', () => { for (let i = 0, len = arr.length; i < len; i++) { } })
.add('for倒序-invertedOrder', () => { for (let i = arr.length; i--;) { } })
.add('for_in', () => { for (let i in arr) { } })
.add('for_of', () => { for (let i of arr) { } })
.add('for_map', () => { arr.map(item => { }) })
.add('for_each', () => { arr.forEach(item => { }) })
.add('for_while', () => { let i = 0; let len = arr.length; while (i < len) { i++ } })
.add('while_normal', () => { let i = 0; while (i < arr.length) { i++ } })
.on('cycle', event => { console.log(String(event.target)); })
.on('complete', function () {
const fastest = this.filter('fastest').map('name');
console.log(`Fastest is ${fastest}`); })
.run({ 'async': true });
接口:
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'content-type':'text/plain'});
res.end('hello world');})
.listen(3002)
console.log('Server running at http://127.0.0.1:8888/');
4、测试工具
clinic 、autocannon
#循环
clinic doctor -- node index.js # connections:10
autocannon http://127.0.0.1:3002 -c 10 # connections:1000
autocannon http://127.0.0.1:3002 -c 1000
测试数据结果
注:12,978 ops/sec每秒执行次数;±0.60% 方差;94 runs sampled 样本
| node类型 | Node.js 10.16.3循环计算 | I/O Node.js 10.16.3 |
|---|---|---|
| alinode |
Node.js 10.16.3 on Linux 64-bit for_normal x 13,087 ops/sec ±0.68% (94 runs sampled) 见图1 |
connections:10 见图3 connections:1000 见图4 |
| 官方node |
Node.js 10.16.3 on Linux 64-bit 见图2 |
connections:10 见图5 connections:1000 见图6 |
图1

图2

图3
图4

图5
图6

测试结果分析
cpu计算上,alinode略优于普通node,但是不明显;
从网络I/O上看,alinode的延迟性低,每秒处理请求数的性能要优于官方node,数据见下表.
| Node | 并发10 | 并发1000 | 备注 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 延迟平均值(ms) | 延迟标准样本差(ms) | 每秒请求数(req/sec) | req/sec样本标准差 | 延迟平均值(ms) | 延迟标准样本差(ms) | 每秒请求数(req/sec) | req/sec样本标准差 | ||
| alinode | 0.02 | 0.18 | 32678.91 | 8410 | 32.79 | 8.81 | 30114.91 | 3449.49 | |
| 官方node | 0.08 | 0.42 | 18614.6 | 4850 | 53.91 | 17.95 | 18430.19 | 2982.79 | |
对于生产中的性能待进一步的论证.如有错误,欢迎批评指正.
alinode与node性能测试方法与分析的更多相关文章
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- nginx / apache / tomcat /resin等 http server的benchmark性能测试方法
性能测试是软件产品发布前必经阶段,对于web app的发布需要使用http server,可选择的优秀免费http server主要有开源apache server, 俄国的nginx,专用于java ...
- Kafka设计解析(五)Kafka性能测试方法及Benchmark报告
转载自 技术世界,原文链接 Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告 摘要 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafk ...
- 转:Android应用开发性能优化完全分析
转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...
- 如何使用工具进行线上 PHP 性能追踪及分析?
工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug.xhprof.New Relic .OneAPM.使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环 ...
- 转:使用xhprof进行线上PHP性能追踪及分析
原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...
随机推荐
- 创建进程池与线程池concurrent.futures模块的使用
一.进程池. 当并发的任务数量远远大于计算机所能承受的范围,即无法一次性开启过多的任务数量就应该考虑去 限制进程数或线程数,从而保证服务器不会因超载而瘫痪.这时候就出现了进程池和线程池. 二.conc ...
- charles 反向代理
本文参考:charles 反向代理 这个比较有逼格了: 正向代理和反向代理的区别: 正向代理:是代理客户端,为客户端收发请求,使真实客户端对服务器不可见:在客户这一端的,替客户收发请求(类似现在正常使 ...
- Day 5文件管理—三剑客的了解
文件的下载 wget curl 1.文件的上传 rz sz #不支持拷贝文件夹 文件内容进行 排序 sort ,去重uniq, 统计 文件的截取 cut awk sed .... | ######3. ...
- React学习笔记(持续更新)
2.2页面加载过程 1.资源加载过程:URL->DNS查询->资源请求->浏览器解析 ①URL结构:http://www.hhh.com:80/getdata?pid=1#title ...
- SpringBoot之整合Mybatis(增,改,删)
一,在上一篇文章SpringBoot之整合Mybatis中,我们使用spring boot整合了Mybatis,并演示了查询操作.接下来我们将完善这个示例,增加增,删,改的功能. 二,改动代码 1.修 ...
- Java的EOF标识?
这篇是关于JAVA中EOF标识的讲解,之前在工作上碰到过一个问题,有人问过,不能通过判断EOF来知道文件有没有读取完毕吗?其实,还真不能. 直接从JDK接口文档入手,以FileInputStrea ...
- Guava的常用方法示例
Guava Maven Dependency <dependency> <groupId>com.google.guava</groupId> <artifa ...
- 2019-2020-1 20199303<Linux内核原理与分析>第二周作业
2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...
- Python常用端口扫描
from socket import * import sys host=sys.argv[1] service={':'HTTP', ':'SQL_Server', ':'Remote_Destop ...
- 基于SpringBoot+WebSocket搭建一个简单的多人聊天系统
前言 今天闲来无事,就来了解一下WebSocket协议.来简单了解一下吧. WebSocket是什么 首先了解一下WebSocket是什么?WebSocket是一种在单个TCP连接上进行全双工 ...