PHP运行时性能基准测试
off999 2025-01-07 14:56 25 浏览 0 评论
测试环境
- 每个运行时在1或2个Docker容器中运行
- 每个容器有1个CPU和1GB RAM
- 负载测试工具位于同一Docker网络中
测试应用程序
Symfony提供了运行时组件。根据官方文档,它“从任何全局状态中提取引导逻辑,以确保应用程序可以在运行时运行,如”。这意味着,您可以使用任何您喜欢的运行时来开发应用程序,但在生产中运行最高性能。因此,我们不仅可以使用传统的服务器运行应用程序,还可以使用Swoole,AMPHP和ReactPHP等库。展望未来,最后两人被排除在竞争之外。
负载测试工具
K6用于运行负载测试。每个运行时运行3次,30秒内有10、100和1000个并发连接。
运行时
- Apache(prefork模式)+ mod_php
- Apache(事件模式)+ PHP-FPM
- Nginx + PHP-FPM
- Nginx Unit应用服务器
- Nginx Unit应用服务器
- Nginx + Roadrunner(fcgi模式)
- FrankenPHP
- FrankenPHP(worker模式)
- Swoole
所有运行时都基于官方Docker镜像。如果不使用镜像,则在构建过程中将应用程序的代码复制到镜像中。PHP 8.3无处不在,除了Nginx Unit。2024年初,Nginx Unit支持的最高PHP版本为8.2。
不幸的是,我没有找到与Symfony 7兼容的最新版本的ReactPHP和AMPHP运行时。PHPPM GitHub和Dockerhub看起来都被抛弃了。
应用以下PHP和Symfony设置:
- 使用php.ini-production(附带官方Docker容器)
- 已启用Opcache
- 启用JIT
- 根据Symfony最佳实践配置preload
- Composer自动加载器已优化
- Symfony在生产模式下运行
- 服务容器转储到单个文件
- Symfony缓存在容器构建期间预热
应用程序代码以及容器配置可以在GitHub https://github.com/DimDev/php-runtimes-benchmark上找到。
结果
- 001_Apache+mod_php和002_Apache + PHP-FPM显示了几乎相同的结果。
- 003_Nginx+PHP-FPM在工作负载较低(并发10和100)时非常接近001_Apache+mod_php和002_Apache + PHP-FPM。
- 003_Nginx+PHP-FPM在并发量为1000时,能够服务的请求数是Apache堆栈的2倍
- 004_Nginx单元。首先-哇!!它比传统和最流行的003_Nginx+PHP-FPM快3倍
- 我不认为005_Roadrunner和006_Nginx+Roadrunner之间有很大的区别
- 尽管如此,基于Roadrunner的堆栈比003_Nginx+PHP-FPM快2倍以上
- 007_FrankenPHP(非工作模式)从性能角度来看非常接近003_Nginx+PHP-FPM
- 008_FrankenPHP(worker mode). Double WOW!我不相信从第一次尝试和运行负载测试3或4倍。因此,当发送1000个并发请求时,FrankenPHP(工人模式)比Nginx+PHP-FPM快10倍。同时,也面临着一个问题。无法用php-ini. production启动容器。
- 009_swoole -也是双重WOW!.几乎与008_FrankenPHP(wm)相同的速度。非常快。但是,请记住,您的代码应该调整为与Swoole一起运行。对于Symfony,我们有一个bundle,它扩展了symfony/runtime组件。
- 上一篇:性能测试之tomcat+nginx负载均衡
- 下一篇:Nginx-性能优化
相关推荐
- 怎么查询家里wifi密码(怎么查询家里wifi密码是多少)
-
一、通过已连接wifi的电脑查看1、找到电脑右下角的无线网图标,就是类似信号的图标,点开;2、然后右键自己的wifi名称,选择“属性”;3、进去之后勾选“显示字符”,然后就可以看见密码框的密码以数字显...
- 分区工具diskgenius怎么合并分区
-
DiskGenius是一款功能全面的磁盘管理工具,其可以帮助我们进行磁盘分区管理,包括创建新分区、删除分区、扩展分区等。如果您想要合并分区到C盘,可以按照以下步骤进行操作:1.打开DiskGeniu...
- windows10易升怎么用(微软windows10易升使用教程)
-
windows10易升是微软官方的。windows10易升是微软官方发布的升级助理或者叫升级助手(官方下载),帮助你升级到win10最新版本,同时也帮助Win7Win8.1用户升级到Windows1...
- 300兆光纤买什么路由器(300兆光纤买3000m的路由器有用吗)
-
对于300Mbps的网速,推荐选择支持AC750及以上的路由器型号。比如TP-LinkArcherC20、D-LinkDIR-816、NetgearR6020等,都是性价比不错的选择。此类路由...
- windows10产品密钥查询(查看windows10产品密钥)
-
要查看电脑上Windows10的产品密钥,你可以按照以下步骤进行操作:打开“开始”菜单,然后点击“设置”图标(齿轮状图标)。在“设置”窗口中,点击“更新和安全”选项。在左侧导航栏中,选择“激活”选项...
- 电脑总死机卡住不动怎么办(电脑老是死机卡住)
-
如果你的电脑经常卡死,而且只能强制关机,别忘了说明电脑这个配置不够造成的,你需要提高一下它的配置,比如说加一个内存条或者换一个固态硬盘,这样才能够正常运行,不然的话这种电脑是没有办法使用的,现在电脑都...
- win10自动修复死循环无法开机
-
答:1、请确保电脑有充足的电源供应,确保电源可以正常供电;2、检查U盘是否正常安装;3、检查是否有新的软硬件设备接入;4、运行chkdsk,检查硬盘并修复文件系统;5、检查Windows更新,如果存在...
-
- 查看台式电脑ip地址(查询台式电脑ip地址)
-
如何查看主机名和IP地址:右击我的电脑-属性-网络标识(win2000)/计算机名(winxp)-完整的计算机名称后面的就是你的主机名.右击网上邻居-,属性-右击本地连接-属性-双击INTERNET协议(tcp/ip)就可以看到自己的I...
-
2025-12-15 19:03 off999
- windows7 ultimate(windows7ultimate无法启动)
-
32位的。1、在下载操作系统镜像的时候,带有x86标识的一般是32位系统,指的是CPU地址总线是32位、fetch、decode解压指令时也按32位字长来进行。x64一般表示系统为64位。2、x86是...
- 雨林系统u盘安装步骤(雨林重装系统)
-
如果是ISO镜像那就刻盘安装,如果不想刻盘,就硬盘安装。问题又来了,大部分的都是GHOST的系统,还有就是纯安装版的。我只说一下GHOST的,先把ISO文件给解压了,然后里边会有占主要空间大小的.GH...
-
- 0xc000021a手动修复(修复0xc0000225)
-
出现这样的问题很常见,用以下方法及解决方案就可以解决1、错误代码0xc000021a表示用户模式子系统有所损坏。一般按照蓝屏提示重启系统,即可正常运行。2、如果重启没能解决,则建议通过“最后一次正确的配置”方式启动系统。3、如果系统文件被破...
-
2025-12-15 17:51 off999
-
- windows7网络驱动(win7网络驱动在哪个文件夹)
-
1.Networkcarddriver。2.右键我的电脑,点击“属性”,选择左侧“设备管理器”3.点击“网络适配器”,如果方框内没有驱动,请下载驱动精灵安装网卡驱动。在Windows7操作系统中,网络驱动程序的名称通常以网络适配器的品...
-
2025-12-15 17:03 off999
- diskgenius的功能介绍(diskgenius是什么)
-
先打开DiskGenius(如果系统打不开了,可以在PE下运行),在弹出分区工具Diskgenius工具中,依次点击“硬盘——重建主引导记录(MBR)”选项,无需理会弹出的提示窗口,直接按下“是”即可...
- 网速快但是打开网页慢(网速快但是打开网页慢怎么回事)
-
原因有很多,有可能是路由器的原因,也有可能是其他原因,总的来说,网速慢的常见原因有以下几种:1.wifi被人蹭网,别人占用了带宽或者给你限速了,可以登录路由器管理页面查看连接的设备数。2.路由器性能...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
