node.js调研与服务性能测试
这几天对nodejs进行了一下简单的调研
主要关注这几个方面
- socket服务性能,
- socket客户端性能
- http服务性能.
- 服务的稳定性与资源占用
- 开发成本
考虑到今后的应用场景, 实现了一个简单的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压力工具.
建议继续学习:
- Xvfb+YSlow+ShowSlow搭建前端性能测试框架 (阅读:54292)
- 安全测试与渗透测试区别 (阅读:23780)
- 30分钟3300%性能提升――python+memcached网页优化小记 (阅读:12224)
- Go Reflect 性能 (阅读:10554)
- 长连接(KeepAlive)在 http 连接中的性能影响 (阅读:7156)
- 使用Fiddler对手机应用进行抓包测试 (阅读:7027)
- SQL vs NoSQL:数据库并发写入性能比拼 (阅读:6693)
- 服务器性能测试工具推荐 (阅读:6567)
- 给Apache做压力测试时遇到的问题 (阅读:6011)
- WEB性能测试工具推荐 (阅读:5728)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:qingdu 来源: 淘宝数据平台与产品部官方博客 tbdata.org
- 标签: nodejs 性能 测试
- 发布时间:2010-12-21 23:10:28
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] android 开发入门
- [65] 如何拿下简短的域名
- [64] find命令的一点注意事项
- [62] 流程管理与用户研究
- [62] Go Reflect 性能
- [60] Oracle MTS模式下 进程地址与会话信
- [60] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录