“wrk 压测 hyperf 常驻内存框架居然不如thinkphp8性能”
Swoole协程(常驻内存) PK FPM(半常驻内存)
证明这篇帖子是完全错误的,常驻内存(Swoole)不如FPM: https://learnku.com/articles/85038。
- 压测参数:wrk -c 100 -t 4 -d 30 localhost:8000
- 机器:CPU 8核心, 内存16GB
- 程序工具:
编号 框架 编程语言 容器 进程数量 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:

2.ThinkPHP 8:

ThinkPHP8 FPM派系:
php-fpm, nginx 进程数量:

2次最终结果:

Hyperf 常驻内存派系:
Swoole\HttpServer 进程数量:

2次最终结果:

压测结果:
| 编号 | 框架 | QPS | CPU占用率 |
|---|---|---|---|
| 1 | ThinkPHP | 142 | 90% |
| 2 | Hyperf | 245 | 12% |
CPU占用率证据:
Hyperf

ThinkPHP 8
nginx 配置:
fpm 配置:
Hyperf 确实不行250(二百五),fpm 140(妥妥高智商)。
实际上Hyperf 平均在250 qps, fpm 差不多稳定140。连续两次截图压测,毕竟网络有抖动。
我笔记本是无线压测的,有线肯定不止这点。
流行指数:
下面数据能看出Hyperf 已经直追ThinkPHP8。
| 编号 | 框架 | 安装量 |
|---|---|---|
| 1 | topthink/framework | 2364564 |
| 2 | hyperf/engine | 1901888 |
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
我不是要证明swoole 或者webman不行。而是要打破他们说的性能高几十倍的说法。如果实际使用场景QPS只是高出一倍的话。要就那要考虑是不是应该转用swoole框架。
any way.这个帖子非常好,起码自己动手测。知道swoole 好在哪里。
hyperf跟thinkphp是不是用同一个http客户端扩展包?
无论是swoole 或者 workerman,当遇到阻塞操作时,比如网络请求阻塞、文件IO阻塞等,如果这些阻塞操作持续时间较长,会导致事件循环无法继续执行其他任务(由于常驻内存,可能做连接池,不用频繁创建/销毁对象,理论上性能也会有一点做优势)。但swoole有提供协程化的MySQL Client,所以遇到数据库读写也不会阻塞。hyperf 也有Hyperf\Guzzle进行了协程化处理,你换这个做网络请求,QPS会马上上来。
本质上 Swoole/Workerman 还是阻塞的,不是异步的。他们胜在文件 io 加载,PHP8 有 JIT 的加持之后,个人认为差距没有十几倍,几十倍这么夸张。hy 可以开启协程在测试下。还有一点就是 hy 我记得支持数据库连接池的。也是可以提速的,都可以用上看看。
hyperf请使用协程风格编程,默认这个选项是不开启的
我觉得测试应该是测试框架本身的性能,而不是加一个外部请求然后测性能。
如果两个框架本身只需要50ms和100ms,这时候他们的差距是两倍。但是你请求百度需要500ms,这时候他们性能差距就不到10%了 :dog:
我觉得查询数据库比请求外部URL靠谱很多。
@Hyperf @李铭昕
可以试试go的,其实也没想象的那么强 :joy:
fpmcpu占用90%,开了opcache吗?常见的业务场景,主要是数据库操作多,可以测下数据库业务查询或写入并发情况。
高手,你这么压测,Golang 压测结果也一样稀碎。
你 FPM 进程 64 个,并发 100
你要不把 FPM 进程设置为 100 个,性能绝对能跟 Webman Hyperf 持平。
@李铭昕 大佬,我之前也是一知半解,但我看了你们对话我大概理解的意思是,
测试框架性能是测试框架本身运行的耗时,而例子中请求了外部链接,外部链接耗时并不代表框架运行速度。
我基于此发现了这其实是逻辑问题,要理清楚关系和概念后再讨论才有意义。是否可以这样理解?
好多人连并发和阻塞都没搞懂,协程解决的根本问题是什么都不知道,你这压测场景就像这个例子:我和举重冠军比赛,举重的项目是5公斤级的,怎么举重冠军能举起来我就举不起吗
实际落地坑多吗?看到好几个文章了 都说虽然强,但慎用,坑很多,既然坑很多且一般开发者不好解决的话再强也没用啊
了解一下其他语言的异步非阻塞web框架吧。例如nodejs.我测的目的是为了指出,如果你的项目是因为数据库查询导致请求慢,换成swoole或者webman框架并不能解决问题。测试数据和参数方法都是写明白的。我不明白哪里误导了。反而是有些网友太过上头。非常情绪化
这是一篇可以让人血压升高的帖子,只能说Hyperf作者的脾气真好。
没有业务的测试,都是假测试!真正的瓶颈是查询数据库,不是代码
无聊的测试,生产环境对于并发的优化受很多因素影响,不是说单纯靠程序都能搞定的。合理的利用资源,才能提升性能。php+fpm 完全能把企业做上市了,真到了需要高并发时候业务都起来了,在针对业务场景优化完全来得及。只要你明白高并发说的是什么,用什么都一样。
现在 硬件便宜,测试也没有什么意义 用tp也好 laravel hyperf 也好 自己喜欢用什么就用什么。我们曾经用hyperf 开个几百个容器,一天几百万ip。
看到请求一个网页我就笑了,我自己写一个页面sleep(5)再响应200 ,fpm性能会更好。设计这种XX设计简直就是浪费大家的时间
看到这个,我就觉得好笑。我觉得你可以参考参考别人家的这个压测 www.techempower.com/benchmarks/#se...
一方不懂压测,一方自恃清高根本不愿意花心思帮人解惑,认为就是故意黑他。
这种是项目负责人实际上就是排斥普通用户,只接受懂他、捧着他的用户。