node.js调研与服务性能测试

标签: 高性能服务器 node node.js nodejs | 发表时间:2010-12-21 12:28 | 作者:qingdu lostsnow
出处:http://www.tbdata.org

这几天对nodejs进行了一下简单的调研

主要关注这几个方面

  1. socket服务性能,
  2. socket客户端性能
  3. http服务性能.
  4. 服务的稳定性与资源占用
  5. 开发成本

考虑到今后的应用场景, 实现了一个简单的memcache代理服务.

内部维护了一个50连接的简单连接池, 通过长连接与memcache服务器相连.
同时对外提供socket代理服务与http restful服务

测试环境

测试使用编译安装的node.js v0.3.1,未使用任何第三方modules
代理服务与memcache部署在不同的服务器中.
系统均为rhel 5.2, cpu: AMD Opteron 2200, mem: 4g

测试用例

通过此代理程序, 分别使用memcached协议与http协议从memcache服务中取出一个长度为100bytes的值, 并检查最终输出是否正确

压力工具

socket: 由于没有找到合适的socket压力工具.用node.js实现了一个简单的socket压力工具
http: siege 2.70

测试结论

服务启动与空载资源占用


程序启动20秒后,系统资源占用达到稳定状态, 内存消耗13m, 堆尺寸8m
由堆使用变化可知v8每隔7~8秒会进行一次gc操作

100并发100秒socket长连接压力


压力启动后内存占用迅速提高至30m, v8堆也基本维持在22m的水平, 使用率在20%到50%之间波动
此时v8的gc操作频率降低到约20秒一次.
qps曲线比较平稳,在16700左右波动,幅度在400左右,v8的gc操作对性能没有明显影响
压力过程中cpu占用基本维持在95%左右,处于满载状态.
另, 测试结束后20秒左右, 所占用资源被释放,内存与v8堆均回复至空载水平.

250并发100秒http长连接压力


与socket相比, http消耗的系统资源约多出30%,且8v的gc操作也要更频繁
qps值为4392, gc操作对qps的影响也不明显
压力过程中cpu占用基本维持在95%左右,处于满载状态.
与socket时类似, 测试结束后20秒左右, 所占用资源被释放,内存与v8堆均回复至空载水平.

一些结论

性能:单cpu, socket 17000 qps, http 4400 qps, 内存消耗30~40m, cpu基本满载
用作中间层服务时,性能瓶颈基本应位于cpu运算性能.
v8引擎gc操作带来的性能影响已经可以基本忽略.
系统的健壮性不错,测试过程中qps与负载曲线基本都处于水平状态.且成功率均为100%
快速开发, 代理服务与压力工具总计开发时间3~4小时左右, 且最终性能与编译型语言差距不大,但开发时间节省很多
开发模式上与传统服务器端动态语言区别较大,不熟悉的开发人员需要一些上手时间.

另,由于时间因素,仅进行了单进程模式下的性能,使用web-worker模型的多进程模式下的性能没有进行测试
不过由单进程性能可以基本推断,在普通8核服务器下应能做到10万以上的socket, qps, 3万以上的http qps

总体来说, 非阻塞模式的io处理给nodejs带来在相对低系统资源耗用下的高性能与出众的负载能力, 非常适合用作依赖其它io资源的中间层服务.

相关源码下载:

http://nodejs-memcache-proxy-performance-test.googlecode.com/files/nodejs-text.tar.gz
包括测试程序与socket压力工具.

相关 [node js 服务] 推荐:

node js 断点调试

- - Web前端 - ITeye博客
大部分基于 Node.js 的应用都是运行在浏览器中的,. 例如强大的调试工具 node-inspector. node-inspector 是一个完全基于 Node.js 的开源在线调试工具,提供了强大的调试功能和友好. 的用户界面,它的使用方法十分简便. 首先,使用 npm install -g node-inspector 命令安装 node-inspector,然后在终.

Vercel 部署 Node 服务

- - 掘金 前端
之前在写 面试常客:HTTP 缓存时,曾经就强缓存和协商缓存写过两个demo,但缓存要在服务端做,只能贴上代码,不能在网页上感受(虽然我贴了gif). 笔者的所有 demo 例子都放在 github page 上,其特点是不需要服务器即可部署静态资源,但它不具备部署服务端应用能力. 最近笔者在了解 CI/CD 方面的知识点,想起了 Vercel,就想着能否将服务端应用架在 vercel 上呢.

记一次FMS对接Node-Media-Server转码服务

- - 贝壳博客
今天接到一个客户的需求,在不改变原有fms服务架构的条件下,对接到Node-Media-Server,提供HLS,RTMP,Http-FLV音频转码服务. 客户以往的架构是Flash在web推流,h.264+Nellymoser编码格式,这个用flash播放是没有问题的. 但flash基本上已经被各大浏览器列为默认关闭了,Android,iOS等更是不会支持的.

什么是Node?

- We_Get - 博客园新闻频道
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料.   译文全文:http://jayli.github.com/whatisnode/index.html.   作者:Brett McLaughlin ,原文:What is Node?.

Node入门

- - CSDN博客编程语言推荐文章
作者:  Manuel Kiessling. 翻译:  goddyzhao &  GrayZhang &  MondayChen. 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识. 本书绝不是一本“Hello World”的教程. 你正在阅读的已经是本书的最终版.

浅析Hadoop Secondary NameNode,CheckPoint Node,Backup Node

- - CSDN博客云计算推荐文章
Hadoop SecondaryNameNode并不是Hadoop 第二个NameNode,它不提供NameNode服务,而仅仅是NameNode的一个工具. 这个工具帮助NameNode管理Metadata数据. NameNode的HDFS文件信息(即Metadata)记录在内存中,client的文件写操作直接修改内存中的Metadata,同时也会记录到硬盘的Edits文件,这是一个Log文件.

使用js服务端语言nodejs和express建个人站点

- - CSDN博客Web前端推荐文章
使用js服务端语言nodejs和express建个人站点. 作者:田想兵 个人网址: http://www.lovewebgames.com. 今天主题很沉重,因为听说京城又在开会,房价上涨,物价也在涨,还有西湖边上的小松鼠被游客踩死了. 所以说点不开心的事让大伙开心一下,记得一个月前,公司破产,为了生计,我不得不再次投入到找工作的大军中,在杭州,可能做IT行业的技工,都想进阿里淘宝这家杭州标志性的企业,我也不例外,于是投了一份资深前端职位的简历.

[译]什么是Node?

- blacktulip - Taobao UED Team
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料. 译文全文:http://jayli.github.com/whatisnode/index.html. 作者:Brett McLaughlin ,原文:What is Node?.

用node作桌面开发

- InterMa - CNode社区
node的定位是,server-side javascript. 但程序员最爱做的事,就是把一个东西用在不该用的地方. 那么,可以把node用在桌面开发上吗. 把Javascript用在桌面开发上,早有先例,比如GTK+的gjs,还有Qt的QML(顺带一提,QML代表着桌面开发的另一个方向,a promising way),GNOME3中,也用javascript作为桌面插件的开发语言.