“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

Swoole协程(常驻内存) PK FPM(半常驻内存)

证明这篇帖子是完全错误的,常驻内存(Swoole)不如FPM: https://learnku.com/articles/85038。

  1. 压测参数:wrk -c 100 -t 4 -d 30 localhost:8000
  2. 机器:CPU 8核心, 内存16GB
  3. 程序工具:
    编号 框架 编程语言 容器 进程数量
    1 ThinkPHP 8 PHP 8.1.25 nginx+php-fpm nginx:32 - phpfpm:64
    2 Hyperf PHP 8.1.25 Swoole HttpServer Worker: 16

压测代码:

1. Hyperf:

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

2.ThinkPHP 8:

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

ThinkPHP8 FPM派系:

php-fpm, nginx 进程数量:

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

2次最终结果:

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

Hyperf 常驻内存派系:

Swoole\HttpServer 进程数量:

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

2次最终结果:

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

压测结果:

编号 框架 QPS CPU占用率
1 ThinkPHP 142 90%
2 Hyperf 245 12%

CPU占用率证据:

Hyperf

“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

ThinkPHP 8

nginx 配置:
“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

fpm 配置:
“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”

Hyperf 确实不行250(二百五),fpm 140(妥妥高智商)。

实际上Hyperf 平均在250 qps, fpm 差不多稳定140。连续两次截图压测,毕竟网络有抖动。
我笔记本是无线压测的,有线肯定不止这点。

流行指数:

下面数据能看出Hyperf 已经直追ThinkPHP8。

编号 框架 安装量
1 topthink/framework 2364564
2 hyperf/engine 1901888
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 101

我不是要证明swoole 或者webman不行。而是要打破他们说的性能高几十倍的说法。如果实际使用场景QPS只是高出一倍的话。要就那要考虑是不是应该转用swoole框架。

4个月前 评论
农夫山泉 (作者) 4个月前
meows (楼主) 4个月前
tusi 3个月前

any way.这个帖子非常好,起码自己动手测。知道swoole 好在哪里。

4个月前 评论

hyperf跟thinkphp是不是用同一个http客户端扩展包?

4个月前 评论

无论是swoole 或者 workerman,当遇到阻塞操作时,比如网络请求阻塞、文件IO阻塞等,如果这些阻塞操作持续时间较长,会导致事件循环无法继续执行其他任务(由于常驻内存,可能做连接池,不用频繁创建/销毁对象,理论上性能也会有一点做优势)。但swoole有提供协程化的MySQL Client,所以遇到数据库读写也不会阻塞。hyperf 也有Hyperf\Guzzle进行了协程化处理,你换这个做网络请求,QPS会马上上来。

4个月前 评论
meows (楼主) 4个月前
JaguarJack

本质上 Swoole/Workerman 还是阻塞的,不是异步的。他们胜在文件 io 加载,PHP8 有 JIT 的加持之后,个人认为差距没有十几倍,几十倍这么夸张。hy 可以开启协程在测试下。还有一点就是 hy 我记得支持数据库连接池的。也是可以提速的,都可以用上看看。

4个月前 评论
meows (楼主) 4个月前
meows (楼主) 4个月前
JaguarJack (作者) 4个月前
mrpzx001 4个月前

hyperf请使用协程风格编程,默认这个选项是不开启的

4个月前 评论
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
Aoyamakiri (作者) 4个月前
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
Aoyamakiri (作者) 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
mrpzx001 4个月前
meows (楼主) 4个月前
nff93

我觉得测试应该是测试框架本身的性能,而不是加一个外部请求然后测性能。

如果两个框架本身只需要50ms和100ms,这时候他们的差距是两倍。但是你请求百度需要500ms,这时候他们性能差距就不到10%了 :dog:

我觉得查询数据库比请求外部URL靠谱很多。

4个月前 评论
raybon 4个月前
meows (楼主) 4个月前
meows (楼主) 4个月前
raybon 4个月前
meows (楼主) 4个月前
农夫山泉 4个月前
raybon 3个月前

@Hyperf @李铭昕

4个月前 评论
李铭昕 4个月前
DianWang

可以试试go的,其实也没想象的那么强 :joy:

4个月前 评论
meows (楼主) 4个月前

fpmcpu占用90%,开了opcache吗?
常见的业务场景,主要是数据库操作多,可以测下数据库业务查询或写入并发情况。

4个月前 评论
meows (楼主) 4个月前
李铭昕

高手,你这么压测,Golang 压测结果也一样稀碎。

你 FPM 进程 64 个,并发 100

你要不把 FPM 进程设置为 100 个,性能绝对能跟 Webman Hyperf 持平。

4个月前 评论
李铭昕 (作者) 4个月前
李铭昕 (作者) 4个月前
meows (楼主) 4个月前
晏南风 4个月前
meows (楼主) 4个月前
李铭昕 (作者) 4个月前
李铭昕 (作者) 4个月前
meows (楼主) 4个月前
nff93 4个月前
李铭昕 (作者) 4个月前
农夫山泉 4个月前

@李铭昕 大佬,我之前也是一知半解,但我看了你们对话我大概理解的意思是,

测试框架性能是测试框架本身运行的耗时,而例子中请求了外部链接,外部链接耗时并不代表框架运行速度。

我基于此发现了这其实是逻辑问题,要理清楚关系和概念后再讨论才有意义。是否可以这样理解?

4个月前 评论
李铭昕 4个月前
李铭昕 4个月前
李铭昕 4个月前
李铭昕 4个月前
农夫山泉 4个月前
李铭昕 4个月前

好多人连并发和阻塞都没搞懂,协程解决的根本问题是什么都不知道,你这压测场景就像这个例子:我和举重冠军比赛,举重的项目是5公斤级的,怎么举重冠军能举起来我就举不起吗

4个月前 评论
农夫山泉 4个月前
mrpzx001 4个月前
迷途的羔羊 (作者) 3个月前
迷途的羔羊 (作者) 3个月前

实际落地坑多吗?看到好几个文章了 都说虽然强,但慎用,坑很多,既然坑很多且一般开发者不好解决的话再强也没用啊

4个月前 评论
meows (楼主) 4个月前
sheshou 3个月前
农夫山泉 3个月前
lwies 3个月前

了解一下其他语言的异步非阻塞web框架吧。例如nodejs.我测的目的是为了指出,如果你的项目是因为数据库查询导致请求慢,换成swoole或者webman框架并不能解决问题。测试数据和参数方法都是写明白的。我不明白哪里误导了。反而是有些网友太过上头。非常情绪化

4个月前 评论
李铭昕 4个月前
李铭昕 4个月前
农夫山泉 (作者) 4个月前
李铭昕 4个月前
李铭昕 4个月前
农夫山泉 (作者) 4个月前
Jyunwaa

这是一篇可以让人血压升高的帖子,只能说Hyperf作者的脾气真好。

3个月前 评论
巅峰互联

没有业务的测试,都是假测试!真正的瓶颈是查询数据库,不是代码

3个月前 评论
yourself

无聊的测试,生产环境对于并发的优化受很多因素影响,不是说单纯靠程序都能搞定的。合理的利用资源,才能提升性能。php+fpm 完全能把企业做上市了,真到了需要高并发时候业务都起来了,在针对业务场景优化完全来得及。只要你明白高并发说的是什么,用什么都一样。

3个月前 评论
农夫山泉 3个月前

现在 硬件便宜,测试也没有什么意义 用tp也好 laravel hyperf 也好 自己喜欢用什么就用什么。我们曾经用hyperf 开个几百个容器,一天几百万ip。

3个月前 评论
农夫山泉 3个月前
lovewei 3个月前

看到请求一个网页我就笑了,我自己写一个页面sleep(5)再响应200 ,fpm性能会更好。设计这种XX设计简直就是浪费大家的时间

3个月前 评论

看到这个,我就觉得好笑。我觉得你可以参考参考别人家的这个压测 www.techempower.com/benchmarks/#se...

17小时前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!