需求和技术指标整理

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)
for正序-inTurn x 12,976 ops/sec ±0.96% (88 runs sampled)
for倒序-invertedOrder x 13,169 ops/sec ±0.84% (95 runs sampled)
for_in x 80.03 ops/sec ±1.60% (70 runs sampled)
for_of x 890 ops/sec ±1.09% (89 runs sampled)
for_map x 64.73 ops/sec ±0.75% (66 runs sampled)
for_each x 741 ops/sec ±0.64% (92 runs sampled)
for_while x 12,945 ops/sec ±0.94% (93 runs sampled)
while_normal x 12,904 ops/sec ±0.77% (92 runs sampled)
Fastest is for倒序-invertedOrder

 见图1

connections:10

见图3

connections:1000

见图4

官方node

Node.js 10.16.3 on Linux 64-bit
for_normal x 15,697 ops/sec ±3.54% (75 runs sampled)
for正序-inTurn x 12,590 ops/sec ±1.78% (83 runs sampled)
for倒序-invertedOrder x 11,926 ops/sec ±3.29% (78 runs sampled)
for_in x 61.22 ops/sec ±4.13% (53 runs sampled)
for_of x 720 ops/sec ±3.53% (73 runs sampled)
for_map x 52.43 ops/sec ±4.52% (54 runs sampled)
for_each x 617 ops/sec ±3.31% (78 runs sampled)
for_while x 12,124 ops/sec ±3.03% (80 runs sampled)
while_normal x 15,735 ops/sec ±3.69% (79 runs sampled)
Fastest is while_normal,for_normal

见图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性能测试方法与分析的更多相关文章

  1. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

  2. Android 应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  3. 【转】Android应用开发性能优化完全分析

    http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...

  4. Android应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  5. nginx / apache / tomcat /resin等 http server的benchmark性能测试方法

    性能测试是软件产品发布前必经阶段,对于web app的发布需要使用http server,可选择的优秀免费http server主要有开源apache server, 俄国的nginx,专用于java ...

  6. Kafka设计解析(五)Kafka性能测试方法及Benchmark报告

    转载自 技术世界,原文链接 Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告 摘要 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafk ...

  7. 转:Android应用开发性能优化完全分析

    转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...

  8. 如何使用工具进行线上 PHP 性能追踪及分析?

    工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug.xhprof.New Relic .OneAPM.使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环 ...

  9. 转:使用xhprof进行线上PHP性能追踪及分析

    原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...

随机推荐

  1. 表达式树练习实践:C#值类型、引用类型、泛型、集合、调用函数

    目录 表达式树练习实践:C#值类型.引用类型.泛型.集合.调用函数 一,定义变量 二,访问变量/类型的属性字段和方法 1. 访问属性 2. 调用函数 三,实例化引用类型 四,实例化泛型类型于调用 五, ...

  2. linux文件系统分区、格式化、挂载、卷标挂载、永久挂载

    思想不放松你的行为就不会放松,你的行为放松了,说明你的思想放松了.

  3. log4j日志不输出的问题

    今天服务器上报错,想先去看一下日志进行排查,结果发现日志很久都没有输出过了.从上午排查到下午,刚刚解决,因此记录一下,但现在也只是知其然,并不知其所以然,所以如果大家有什么想法请在下方评论. 先说一下 ...

  4. 30 道 Vue 面试题

    前言 本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性.框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度. 本文章节结构以从易到难进行组织,建议读者按章节顺 ...

  5. AMD vs. CommonJS?

    js开发者对js模块加载的尝试和创新从来都没有停止过,尤其是当nodejs的出现后,模块化加载的必要性更加凸显.本文不讨论如何在nodejs环境来模块化加载(创造者已经利用commonJS机制解决), ...

  6. flask+layui+echarts实现前端动态图展示数据

    效果图: 该效果主要实现一个table展示数据,并在下方生成一个折线图. 实现方式: 1.首先需要对表格进行一个数据加载,这里用到了layui的table.render,具体用法可以参考 https: ...

  7. 国庆佳节第四天,谈谈我月收入增加 4K 的故事

    01.起承 在我下定决心改变的这将近 1 年的时间里,遇到了很多很多有故事的人,以及有趣的事.自我的认知改变特别大!尤其是收入,比去年同时期增加了 4K. 4K,可能也就买 100 斤猪肉.但是对于身 ...

  8. Locomotion和Navigation的区别

    Locomotion和navigation两者都是移动.漫游的意思.但是locomotion是一个比navigation更大的概念,它指的是所有的第一人称视角的变换(first-person moti ...

  9. 解决thinkphp批量上传图片只有一张上传成功解决方案

    批量上传时 存在一个生成文件名的问题 如果出现此bug,则不要用原生的生成规则来命名图片文件名 如果你试试同时上传两个不同类型,例如一张jpg,一张png,你就发现的确是可以两张同时上传的! 方案1: ...

  10. 对BUG的分析与理解

    对BUG的分析与理解 bug的分类 bug,其实就是软件期望的行为与实际行为的差异.从程序的角度来看,在软件整个生命周期中都会有bug的出现.需求分析过程中,需求理解的不足,导致的理解错位 ,遗漏甚至 ...