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压缩文件可以减少响应的大小,能够达到节省带宽的目的。

最新文章

  1. ES5基础之正则表达式02:范围类、预定义类和边界字符
  2. 定时任务-在spring中配置quartz
  3. eclipse默认文件编码
  4. JSON相关(一):JSON.parse()和JSON.stringify()
  5. 桂电在linux、Mac OS环境下使用出校器(支持2.14)
  6. storm学习-storm入门
  7. 【BZOJ】【3004】吊灯
  8. HTTP缓存 1.0 vs 1.1
  9. EF查询百万级数据的性能测试
  10. 简易RPC
  11. [Swift]LeetCode738. 单调递增的数字 | Monotone Increasing Digits
  12. @RequestParam与@PathVariable
  13. 手机app数据的爬取之mitmproxy安装教程
  14. spring 配置事务xml
  15. 在CentOS7.4上手动编译安装Mysql-5.7.20
  16. HIT 2739 - The Chinese Postman Problem - [带权有向图上的中国邮路问题][最小费用最大流]
  17. strtr、str_replace()、substr_replace、preg_replace之间的区别
  18. mvn pom
  19. .net core 第一篇选择开发工具和环境
  20. Android学习笔记_47_SIM卡介绍

热门文章

  1. 虚拟机CentOS防火墙设置
  2. [转载] 第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)
  3. 关于导入本地maven项目pom.xml出现missing artifact org....报错处理
  4. try语句块和异常处理
  5. 【Alpha】Scrum Meeting 0&1
  6. hdu4496-D-city--逆序并查集
  7. 【linux】如何查看文件的创建、修改时间
  8. 送给张思漫,李志媛和王颖的C语言经典例题
  9. es xxx_by_query
  10. 汇编语言_实验四_[bx]和loop的使用