node.js内存缓存的性能情况
1. WEB 服务性能测试和优化
1.1 测试环境搭建
网络环境:内网
压力测试服务器:
服务器系统:Linux 2.6.18
服务器配置:Intel® Xeon™ CPU 3.40GHz 4 CPUS
内存:6GB
反向代理服务器:Nginx服务器
服务器系统:Linux 2.6.18
服务器配置:Pentium® Dual-Core CPU E5800 @ 3.20GHz 2CPUS
内存:2GB
发包服务器:
发包工具:apache 2.2.19自带的ab测试工具
服务器系统:Linux 2.6.18
服务器配置:Pentium® Dual-Core CPU E5800 @ 3.20GHz 2CPUS
内存:1GB
1.2 CPU性能测试
Nginx可作为HTTP服务器,在处理高并发请求的时候拥有比现在主流的Apache服务器更高的性能,同时Nginx也是一个优秀的反向代理服务器。所以在服务器端开启一个或多个Node.JS进程在多核CPU上运行,我们利用Nginx来进行反向代理和负载均衡,监听8888端口,直接通过使用Apache自带的ab测试包对8888端口进行压力测试。获得的测试结果如下所示:
|
Type |
单进程 |
双进程 |
三进程 |
|
Commond |
1000/30 |
1000/30 |
1000/30 |
|
rps |
203 |
311 |
432 |
|
tpq |
4.93 |
3.2 |
2.37 |
|
50%req |
4500ms |
1500ms |
750ms |
|
Fail |
0 |
0 |
0 |
表一 Node.JS多进程压力测试表
注:1000/30:代表命令./ab -c 1000 -t 30 http://10.1.155.40:8888/
rps:代表每秒处理请求数,并发的主要指标
tpq:每个请求处理的时间,单位毫秒
fail:代表平均处理失败请求个数
50%req:代表50%的请求在多少毫秒内返回
在有业务处理压力的情况下,单开Node.JS和多开Node.JS性能有明显差别, 每秒处理请求数性能提升100%,从用户响应速度上提升200%,从稳定性上提升200%。所以在多核CPU运行Node.JS 的时候可将1个CPU绑定Nginx进程使用,其他的CPU绑定Node.JS进程,这样可以明显提升服务器的性能和稳定性。
1.3 缓存优化策略
通过上面的论述我们介绍了Node.JS主要的两个缺点:V8内存限制和Node.JS的单线程等;这里我们给出了几种主要的解决方案,从而有助于其提高Node.JS的响应速度和WEB服务性能。
对于缓存要求不高的Web应用来说,在Node中做缓存最简单高效的方法是使用一个Object对象,将缓存以key-value的形式存入这个对象中,这么做的理由是拥有更快的存取速度。通过测试得知,相比Redis通过TCP连接的形式与客户端进行通信,在程序中直接使用对象进行存储的效率会是Redis的40倍。
对于解决资源不足的问题,尤其是内存方面的问题,通常采用风险转移的方式。即将缓存点从Node.JS进程中转移到第三方成熟的缓存(如Redis,varnish等)中去即可。这样做的优点在于:1、缓存内容没有冗余;2、集中式缓存,减少不一致性的发生;3、更加优秀的缓存算法以保证较高的命中率;3、让Node.JS保持轻量,以解决它更擅长的问题[1];
对于上面提到的请求上涨,硬盘IO 读取压力的问题,我们可以做如下改进:1、为指定几种后缀的文件,在响应时添加Expires头和Cache-Control: max-age头。超时日期设置为1年。2、由于这是静态文件服务器,为所有请求,响应时返回Last-Modified头。3、为带If-Modified-Since的请求头,做日期检查,如果没有修改,则返回304。若修改,则返回文件。4、使用GZip压缩文件可以减少响应的大小,能够达到节省带宽的目的。
node.js内存缓存的性能情况的更多相关文章
- 极简 Node.js 入门 - Node.js 是什么、性能有优势?
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- Node.js 内存泄露 定位
之前我们在64位Linux服务器上使用Node.js时,当Node进程物理内存接近1.6G,由于谷歌V8引擎对内存的限制,会导致进程退出! 显然我们自身编码或npm加载的第3行模块存在内存泄露问题,那 ...
- node.js内存泄露问题记录
先说一下.事情的来龙去脉. 公司开发一款游戏棋牌游戏,服务端的开发是IO密集型,开发的时候,考虑过使用python,java,node.js. 终于选择了node.js(node.js宣传的杀手功能. ...
- npm run start失败&Node.js 查询指定端口运行情况及终止占用端口办法
缘由: node.js项目中运行npm run start命令脚本报错,No such file or directory 最开始以为是命令脚本找不到所谓的执行路径,但后面发现不是,是package. ...
- 你不知道的Node.js性能优化,读了之后水平直线上升
本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...
- 深入理解Node.js中的垃圾回收和内存泄漏的捕获
深入理解Node.js中的垃圾回收和内存泄漏的捕获 文章来自:http://wwsun.github.io/posts/understanding-nodejs-gc.html Jan 5, 2016 ...
- 如何更好的利用Node.js的性能极限
通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性 ...
- Node.js V0.12 新特性之性能优化
v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化. 本文会介绍其中最值得注意的几个. http://www.infoq. ...
- Edge.js:让.NET和Node.js代码比翼齐飞
通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...
随机推荐
- jquery源码解析:each,makeArray,merge,grep,map详解
jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... each: function( ...
- [译文]casperjs使用说明-测试
capserjs自带了一个测试框架,它提供了一个使你能够更容易的测试你的web应用的工具集. 注意: 1.1版本变更 这个测试框架,包括它的所有API,仅能使用在casperjs test子命令下 如 ...
- http错误状态码
http://www.kaiyuanba.cn/html/1/131/226/4258.htm 状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:1xx:指示信息--表示请求已接收 ...
- celery简单理解和使用
解决同步阻塞的问题 将耗时任务放到后台异步执行,不影响用户其他操作. 实现原理 任务队列是一种跨线程,跨机器的机制. 任务队列中包含称作任务的工作单元.有专门的进程持续不断的监视任务队列,并从中得到新 ...
- js 实现全国省市区三级联动
效果: index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...
- Python学习 day12
一.@wraps __name__ 查看函数的名字 __doc__ 查看函数的文档字符串 例: def func(arg): """ 这是一个测试函数,这里是函 ...
- TR-069_Amendment-4:附录G.穿越NAT网关的连接请求方式
注意:这种机制只适用于RFC 3489[21]中定义的经典STUN,RFC 5389引入后,这个机制已经过时.这个机制不是设计用于RFC 5389中定义的STUN.IPv6部署要么不使用NAT,要么以 ...
- plsql起别名出现???乱码,需要配置环境变量
NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- HTML5获取地理经纬度并通过百度接口得到实时位置
注:用的时候将获取北京位置那放到获取经度纬度后面即可 -----------实际用的时候的代码如下:start -------- var myCity;getLocation()function g ...
- mvc Area(区域)相关技术
ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所 ...