前言
因为boss要一个并发能上W得平台,而且还是要PHP得...恩..好吧,我是不喜欢php的,但是没办法,谁叫PHP是世界上最好得语言呢。
于是心血来潮,来了一组 web服务器性能测试,测试有
- php7-fpm(docker) + nginx
- java 8 + tomcat 9
- node.js 5 + express4 +pm2
本来想自己写一个C得web服务器实现得,不过已经有nginx了,而且写着累,测试中没有加入 python,ruby,go,因为不大熟悉,如果你觉得很想看一下,留言一下,我再去跑测试
对于截图得问题,截图太多了(3*4*2张),所以就不一一附上了,每个只附上一张
桌面截图.png配置与环境
CPU:I7-4710QM 8线程(4核超线程)
内存:12G DDR3 1600MHZ
硬盘:530M/S固态
系统:ubuntu linux 16.04TLS
网络: 本机!!请注意与实际的差别
(暂时想不起还有什么配置没说了,漏了请留言)
相关命令
- TOP:用来查看linux资源占用情况
- PM2:一个带均衡负载的进程管理器,用于node多进程启动(作用不限于此)
- docker:一个系统容器,本人就是用它来快速搭载PHP7的
- ab:一个性能测试程序,我在win下也喜欢用它,siege发挥不出服务器的性能,其他还没测试
- ulimit:系统的限制,-n 可以修改允许打开文件数,ab并发需求
开始测试
Nginx
nginx-2.png并发:100 次数:1W
结果:0.3S (0.287, 0.294, 0.305)
估算处理数:34000次/秒 (34801, 34024, 32767)
并发:2W 次数:2W
结果:0.7S (0.714, 0.708, 0.707)
估算处理数:28000次/秒 (28015, 28264, 28290)
并发:2W 次数:100W 下的资源占用测试
完成时间:33S
ab: CPU:98.6% 内存:0.7%
进程占用:4-8进程 (主要4线程)
CPU占用率: 31% 28% 15% 11%
内存占用:0.2-0.9 (基本没变化)
结论
nginx 还是非常不错的,占用的内存,CPU资源都很少,C语言效率还是很好的
php7-fpm(docker)
php-2.png并发:100 次数:1W
结果:1S (1.033, 1.060, 1.064)
估算处理数:9500次/秒 (9678, 9430, 9401)
并发数在php中比较难以控制,而且出现了访问错误
前面部分的读取时间很快
后面部分的读取时间很慢
并发2W 次数2W时 需要60秒
并发1W 次数2W时 需要30秒
并发5K 次数2W时 需要30秒
并发:1W 次数:1W
结果:???S (31.782, 53.001, 16.327)
估算处理数:???次/秒 (629, 377, 1224)
(╯‵□′)╯︵┻━┻
并发385 次数2W时 需要 4秒
并发1000 次数2W时 需要 4.5秒
并发2000 次数2W时 需要 16, 4.3, 7.1, 8.4 秒
(╯‵□′)╯︵┻━┻
并发:385 次数:100W 下的资源占用测试
完成时间:119S
ab: CPU:51% 内存:0.7%
进程占用: nginx:4-8进程 php-fpm: 4-8进程
CPU占用率: php-fpm:都在大约25%; nginx:和上面测试大约相同; 其他还有其他古怪的线程...
内存占用:0.1% (每进程)
奇怪的线程截图
结论
就是它拖了我这么长的时间..大并发时不稳定,资源利用不太好,印象中效率比较差
可能是优化还没到位吧
一开始测试文件也有问题 1W次 要4.5秒....发现是代码加了include其他的初始化文件...
所以其实PHP这样继续写下来,还是有一定的问题的(但是有优化方案)
java 8 + tomcat 9
java-2.png并发:100 次数:10000
结果:0.5S (0.974, 0.576, 0.510, 0.404, 0.424, 0.424)
估算处理数:22000次/秒 (10264, 17360, 19591, 24747, 23611, 23577)
最大并发:20000 (ab上限2W)
并发:20000 次数:20000
结果:1S (0.5s/10000次) (1.698, 1.466, 1.240, 1.060, 0.888, 1.012)
估算处理数:19000次/秒 (11778, 13647, 16134, 18860, 22527, 19754)
并发:20000 次数:100W 下的资源占用测试 (重启容器)
完成时间:46S
ab: CPU:98.6%
进程占用:1进程 多线程
CPU占用率: 220-450% 多数情况在220%左右,偶尔飙升
内存占用: 迅速飙升到 11%,后缓慢上升至15%
结论
越访问越快....但是占用内存比较多,可能是GC还没到位
node.js 5 + express4 +pm2
java-2.png并发:100 次数:10000
结果:1S (1.276, 0.932, 0.904, 0.890)
估算处理数:10000次/秒 (7834, 10724, 11059, 11234)
最大并发:20000 (ab上限2W)
并发:20000 次数:20000
结果:1.7S (0.8s/10000次) (1.910, 1.657, 1.649, 1.755)
估算处理数:11000次/秒 (10469, 12072, 12128, 11398)
并发:20000 次数:100W 下的资源占用测试 (重启容器)
完成时间: 93s
ab: CPU:74%
pm2: CPU:98.7%
进程占用:8进程(手动设置)
CPU占用率: 60%
内存占用: 0.7基本不变
结论
目前是我比较喜欢的语言,运行效率一般,还行,开发效率高一点,没有明显的重大缺陷
后语
这个测试,断断续续做了我2周多...,每次发现都能发现有点不合理的地方,然后重新跑……跑到我都累了,每次跑都有一定的误差
重新编译 ab ,优化 nginx+php配置,等等让我重新跑了N次测试,心都累了
估计读者看完的东西后,能获得的东西可能也不会太多,但如果觉得这篇文章,你觉得有帮助,请点个喜欢,支持一下,谢谢,你的支持,我的动力!
网友评论