选手介绍:

node.js,服务端javascript语言,以出色的事件驱动和I/O异步广受关注,它更像一辆性能出色的Mitsubishi Evlution X;
php,耳熟能详的服务端语言,在互联网领域中市场占有率相当高,它更像一辆性能出色,品牌知名度高的BMW 330i。
驾驶员以及测试员介绍:
网络环境:内网
驾驶员(压力测试服务器):
服务器系统:Linux 2.6.18
服务器配置:Intel(R) Xeon(TM) CPU 3.40GHz 4 CPUS
内存:6GB
测试员(发包服务器):
发包工具:apache 2.2.19自带的ab测试工具
服务器系统:Linux 2.6.18
服务器配置:Pentium(R) Dual-Core CPU E5800 @ 3.20GHz 2CPUS
内存:1GB
车辆介绍:

Mitsubishi Evlution X(node.js):以下简称EVO(node)
版本:V0.4.9;
官方提供性能:6985req/sec(http请求);
改装情况:
1、涡轮增压套件:multi-node(在多核服务器上多开node进程提高性能);
2、运动避震和地盘套件:generic-pool(链接池,用以提高对mysql、redis等i/o操作的性能);
BMW 330i(php):以下简称330(php)
版本:5.2.17;
官方提供性能:8220 req/sec(http请求);
改装情况:
宝马御用改装ACSCHNITZER提供:Nginx+FastCgi;
注意:可能我php配置不是最优化,应该还可以再快一些,下面的一些测试配置都是根据网上的文章进行配置的,如果大师级高手来配的话,估计PHP性能还能提升50%左右,所以这个测试数据仅供参考。
配置是根据张宴的博客再根据实际情况修改来的,原文地址:http://blog.s135.com/nginx_php_v6/
序:
对于原厂EVO(node)和经过改装的EVO(node)之间到底性能会差多少?我们让他们在场地上小试一下身手。
测试内容:
分别对redis的一个key值进行get操作,并返回这个值。压力分别在3000、5000、7000,压测30秒。
com 3000/30 3000/30 3000/30 5000/30 5000/30 5000/30 7000/30 7000/30 7000/30
type node0 node1 node2 node0 node1 node2 node0 node1 node2
rps 4025 5479 5262 3913 5283 5353 3823 5258 5269
tpq 0.24 0.18 0.19 0.26 0.19 0.18 0.26 0.21 0.19
80%req 63 131 671 448 417 1210 1961 856 1650
fail 0 0 0 0 0 0 227 0 0
说明:(下同)
node0表示原装,node1表示只进行了multi-node改装,node2表示进行了multi-node和generic-pool改装。
3000/30:代表命令./ab -c 3000 -t 30 http://10.1.10.150:8888/
rps:代表每秒处理请求数,并发的主要指标
tpq:每个请求处理的时间,单位毫秒。
fail:代表平均处理失败请求个数
80%req:代表80%的请求在多少毫秒内返回。
接下来我们看下对mysql的操作,3者的区别,对mysql的testtable进行select * 操作,testtable有2个字段,1条数据。返回name值为test。
com 3000/30 3000/30 3000/30 5000/30 5000/30 5000/30 7000/30 7000/30 7000/30
type node0 node1 node2 node0 node1 node2 node0 node1 node2
rps 1247 2465 2999 1211 2451 3013 1243 2440 3054
tpq 0.82 0.40 0.33 0.82 0.41 0.33 0.80 0.42 0.33
80%req 2424 2080 627 4329 3103 1365 5433 3610 3188
fail 0 0 0 0 0 0 0 0 0
multi-node的应用显然大大提升了node的性能,连接池只有在特定的情况下才能更好的作用。
如果连接时间越长,操作DB越复杂,例如对redis操作多个key或是排序等,连接池的性能就更能体现出来了。

具体如何对EVO(node)进行改装,详见我的博客:http://snoopyxdy.blog.163.com/blog/static/601174402011841174351/
chapter1:男人之间的战斗,0-400M直线加速
0-400米直线竞速赛又称为“直线加速度赛”,是专为赛车性能而生的比试,没有办法逃避,只能勇往直前。
在空旷的飞机场,EVO(node)和330(php)正准备着一场赤手空拳的较量。
测试内容:
对“hello world” web服务器进行测试,空框架,无任何业务负载。
com 3000/30 3000/30 5000/30 5000/30 7000/30 7000/30
type node php node php node php
rps 7677 3624 7232 3760 6743 3731
tpq 0.13 0.39 0.14 0.41 0.15 0.42
80%req 138 843 477 1343 898 2445
fail 0 0 0 0 0 0
EVO(node)在multi-node的4涡轮增压下(4CPU),一路领先,直到终点,不过在测试中4个CPU一直出于饱和状态,如果有8个核,估计能更快。
而php由于我菜鸟级的配置改装,无法完全发挥他的性能,网上有TX将php裸奔到5000+rps的,大家可以去参考一下。

chapter2:都市街跑,考量你的驾驶技术
跑在都市的路上,经常会看见有两部车子先后从你身边呼啸而过,伴随着引擎轰鸣声的远去,你能感受到速度的激情。犹如我们经常穿梭在繁华的都市内,所以先将生产中最常用到的mysql进行对比测试。
测试内容:
对数据表test进行select * 操作,test数据表内只有一条数据,2个字段,然后返回name,值为test。
com 3000/30 3000/30 5000/30 5000/30 7000/30 7000/30
type node php node php node php
rps 2999 1293 3013 1349 3054 1301
tpq 0.33 0.82 0.33 0.80 0.33 0.80
80%req 627 1369 1365 1979 3188 3903
fail 0 0 0 111 0 573
mysql是建立和释放连接都比较长的,所以node和php性能相比裸奔都大幅下降。
由于php每次请求都需要建立释放连接,所以耗时更长。
而EVO(node)在这时的优势就发挥出来了,multi-node和generic-pool两大利器无缝合作,在街头巷尾远远的甩开了330(php)。
还是那句老话,可能php改装的不到位,各位做个参考把。
chapter3:城市高架,隧道口,匝道上都是我们展现速度的舞台
高架的诞生是为缓和日益阻塞的城市交通,高架上不仅是豪车的天下,更是性能车的舞台,让我们去体验砸道秒杀一切的快感吧。
memcache是作为缓解mysql瓶颈的最佳工具,php+memcache+mysql一直是很经典的组合,广泛用于各大互联网站点内。
测试内容:
对memcache的“test”key取值,然后返回这个值“test”。
com 3000/30 3000/30 5000/30 5000/30 7000/30 7000/30
type node php node php node php
rps 5102 1957 4995 1841 4976 1872
rpt 0.2 0.64 0.2 0.74 0.19 0.70
80%req 672 1713 1033 2150 1494 3551
fail 0 7 0 79 0 335
和mysql对比,memcache建立和释放连接时间要更短,而且直接操作内存,所以两者的测试结果都有不少的上升。
这里php还是受限于他建立和释放连接的损耗,成绩不理想。
chapter4:决战纽博格林
真正的赛车都必须去征服赛道之王——德国纽博格林北环赛道,这条被誉为绿色地狱的20.6km赛道是让赛车在原始的山林之间高速穿梭,赛道随着山势而起伏,宛若云霄飞车。evo在这条赛道的最佳成绩是7分32秒52,而 AC-Schnitzer改装的BMW M3,最佳成绩是7分36秒。
在高速信息化的时代,我们对速度的渴望越发的强烈,Redis作为高速nosql内存db,以其出色的性能被大众认可,现在越来越多的互联网站点加入到了nosql行列。
测试内容:
对Redis的“test”key取值,然后返回这个值“test”。
com 3000/30 3000/30 5000/30 5000/30 7000/30 7000/30
type node php node php node php
rps 5262 2015 5353 1949 5269 1901
tpq 0.19 0.61 0.18 0.61 0.19 0.61
80%req 671 1805 1210 2356 1650 3816
fail 0 0 0 105 0 607
这个测试结果和memcache相差不大,因为redis和memcache相比他的优势不再key-value上,而是hash和sort,还有pub/sub等,所以在纯粹的key-value上,这次测试两者性能不相伯仲。
最终在纽博格林北环赛道,EVO(node)率先冲过了终点,成为本次对比的赢家。
尾声:
我想这次测试的结果应该早已经在各位的预料之中了,事件驱动对于内存消耗更少,非阻塞和连接池的加入让node对I/O操作更上一层楼。
虽然php在各方面都落于下风,但是并不代表php就不如node,php有他更适合的应用场景和广泛的开源框架以及技术支持。
node作为一种新型的服务器语言从被认可,到广泛用于生产环境要走的路还很长。
有图有真像:
这个是在3000并发连发30秒测试的7900+,如果1000并发连发30秒可以到8500+。
图片地址在我的博客,拉到最底部:
http://snoopyxdy.blog.163.com/blog/static/60117440201183101319257/

单服务器node.js和php性能测试相关推荐

  1. 什么是node网站服务器,node.js

    Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型,[1] 让JavaScript 运 ...

  2. nodejs 本地php服务器,node.js创建本地服务器详解

    本文主要和大家分享node.js创建本地服务器详解,简易上手node.js后,我们就可以在自己电脑上创建本地服务器了.希望能帮助到大家. 一.先上代码.//请求Node.js自带的http模块. va ...

  3. 开源 静态 文件 服务器,Node.js搭建静态服务器

    写在开头,本文是node.js最最初级的搭建静态服务器,比较适合新手入门,大神请绕道哦- Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用 ...

  4. 完成静态服务器——Node.js摸石头系列之四

    系列目录:Node.js摸石头系列目录 一.一个错误引发的摸索 上回我们在获取 request 对象的 headers 属性的 'user-agent'  属性时,我使用了 request.heade ...

  5. 【华为云技术分享】如何快速实现鲲鹏弹性云服务器Node.js部署和高可用性?

    "Node 开发者容易面临的前三大困惑分别是异步编程.事件驱动以及 Debug.同时,文档是大家最期待的资源,新人对视频教程和免费在线课程的呼声最高."这份<2020 年 N ...

  6. 巅峰对决:node.js和php性能测试

    参考网站:http://snoopyxdy.blog.163.com/blog/static/60117440201183101319257/ 选手介绍: node.js,服务端javascript语 ...

  7. 突袭HTML5之WebSocket入门2 - 高效服务器Node.js

    JavaScript脱离浏览器的限制以后,隐隐有再次走向光明的迹象,看来还得重新审视一下它的前景.由于条件有限,这里所有的例子是运行在Windows平台下的.而且由于目前并没有太好的组织JS程序的ID ...

  8. node 邮箱服务器,Node.js 搭建邮件服务器

    Node.js 搭建邮件服务器 servervar smtp = require('smtp-protocol'); var server = smtp.createServer(function ( ...

  9. ws协议 服务器,Node.js WebSocket 协议

    WebSocket websocket 是 HTML5 标准的一个新的 网络协议.它是基于 HTTP 协议之上的扩展,是一种可以双向通信的协议. 传统的 HTTP 协议 通信,服务端是不能主动发信息给 ...

最新文章

  1. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
  2. python的时间序列预测,用python中的时间序列预测
  3. SharePoint 网站元素介绍
  4. js如何获取文本节点的值?
  5. leetcode -- 1091. 二进制矩阵中的最短路径
  6. python去重复元素_python 去除单个list中的重复元素
  7. Linux从入门到精通——文件传输
  8. 容器访问宿主机数据库_docker从容器中怎么访问宿主机
  9. 10月19日 蒟蒻的流水账
  10. 线段树(区间更新以及统计片段颜色)
  11. 常见基本题型:进制的转换
  12. 自动驾驶公司如何打造产品市场体系
  13. 重磅丨美国公布长达35页的《2016-2045年新兴科技趋势报告》
  14. vue js监听浏览器tab页切换
  15. 外汇天眼:Apple与MetaQuotes之争!谁是下一个Apple?谁会成下一个MT4/5?
  16. 精品慕课资源推荐 计算机网络
  17. 幸福是什么?怎么得到幸福?
  18. 如何把两张图片拼在一起?
  19. Linux——》系统日志
  20. etcd学习和实战:3、go使用etcd实现服务发现和管理

热门文章

  1. KeyMix for Mac破解教程
  2. 聊聊ringbuffer
  3. 取消键盘Fn功能键方式
  4. 【技术邻】CAE工程师崩溃的10个瞬间
  5. 计算机课学生电脑怎么打开任务管理器,电脑任务管理器的打开方法
  6. 5款知乎高赞的超牛软件,你一定要知道
  7. mac上传文件到阿里云ECS及scp命令使用
  8. mPaaS 服务端核心组件:消息推送 MPS 架构及流程设计
  9. position: -webkit-sticky; /* for Safari */ position: sticky;
  10. 分享129个ASP源码,总有一款适合您