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压缩文件可以减少响应的大小,能够达到节省带宽的目的。
最新文章
- ES5基础之正则表达式02:范围类、预定义类和边界字符
- 定时任务-在spring中配置quartz
- eclipse默认文件编码
- JSON相关(一):JSON.parse()和JSON.stringify()
- 桂电在linux、Mac OS环境下使用出校器(支持2.14)
- storm学习-storm入门
- 【BZOJ】【3004】吊灯
- HTTP缓存 1.0 vs 1.1
- EF查询百万级数据的性能测试
- 简易RPC
- [Swift]LeetCode738. 单调递增的数字 | Monotone Increasing Digits
- @RequestParam与@PathVariable
- 手机app数据的爬取之mitmproxy安装教程
- spring 配置事务xml
- 在CentOS7.4上手动编译安装Mysql-5.7.20
- HIT 2739 - The Chinese Postman Problem - [带权有向图上的中国邮路问题][最小费用最大流]
- strtr、str_replace()、substr_replace、preg_replace之间的区别
- mvn pom
- .net core 第一篇选择开发工具和环境
- Android学习笔记_47_SIM卡介绍
热门文章
- 虚拟机CentOS防火墙设置
- [转载] 第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)
- 关于导入本地maven项目pom.xml出现missing artifact org....报错处理
- try语句块和异常处理
- 【Alpha】Scrum Meeting 0&;1
- hdu4496-D-city--逆序并查集
- 【linux】如何查看文件的创建、修改时间
- 送给张思漫,李志媛和王颖的C语言经典例题
- es xxx_by_query
- 汇编语言_实验四_[bx]和loop的使用