主流web服务器性能测试

作者: MeIsLZHua | 来源:发表于2016-07-16 01:57 被阅读1325次

    前言

    因为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次测试,心都累了

    估计读者看完的东西后,能获得的东西可能也不会太多,但如果觉得这篇文章,你觉得有帮助,请点个喜欢,支持一下,谢谢,你的支持,我的动力!

    相关文章

      网友评论

      • 若水08:谢谢分享
      • whthomas:Java下可以尝试使用Netty做测试,Nginx和Node都有线程模型上的优势,Python方面可以测试下tornado,另外压测推荐一个工具[wrk](https://github.com/wg/wrk)
        MeIsLZHua:@whthomas 谢谢你给的建议

      本文标题:主流web服务器性能测试

      本文链接:https://www.haomeiwen.com/subject/twnqjttx.html