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应用场景,它在这 ...
随机推荐
- 性能测试—认识JMeter(一)
性能测试—认识JMeter(一) <零成本web性能测试>第二章 JMeter基础知识总结和自己的理解 一.JMeter百度词条概念 Apache JMeter是Apache组织开发的基 ...
- POJ1591 M*A*S*H (JAVA)
这水题,真的坑 测试数据最后有空行,如果用sc.hasNextLine()判断,会RE 要改为sc.hasNext() 搞了我一上午,烦死 import java.util.*; public cla ...
- JavaWeb学习笔记(二十二)—— 过滤器filter
一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...
- eAccelerator 配置参数详解
eAccelerator配置参数如下: [eaccelerator]extension=eaccelerator.soeaccelerator.shm_size="64"eacce ...
- PM2的安装和使用简介
一.简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 二.前期必备 node 环境 npm 三.安装 全局安装 ...
- acl权限使用
1.acl的设置技巧 *setfacl 用法: setfactl [-bkRd] [{-m|-x} acl参数] 目标文件名 -m:设置后续的acl参数给文件使用,不可与-x合用 -x:删除后续的ac ...
- Vmtools的安装步骤
目的:实现win和centos之间的相互复制功能 1.进入centos 2.点击vm菜单的->虚拟机->安装VMware Tools 3.centos会出现一个vm的安装包 4.将文件移动 ...
- 云计算、大数据和 AI
我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之间好像互相有关系,一般谈云计算的时候也会提到大数据,谈人工智能的时候也会提 ...
- 简说LINUX 下chmod|chown|chgrp和用法和区别
1.chgrp(改变文件所属用户组) chgrp 用户组 文件名 ###就是这个格了.如果整个目录下的都改,则加-R参数用于递归. 如:chgrp -R user smb.con ...
- 实验Complex
#include<iostream> #include<cmath> using namespace std; class Complex { public: Complex ...