当前位置:首页 > 技术文章 > 正文内容

PHP运行时性能基准测试(php运行速度)

arlanguage3个月前 (02-01)技术文章26

测试环境

  • 每个运行时在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组件。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/2007.html

标签: nginx php并发
分享给朋友:

“PHP运行时性能基准测试(php运行速度)” 的相关文章

tomcat配置域名的几种方式

我们自己在开发项目时一般使用的是ip访问,如果要对外发布是需要申请域名的,毕竟一个域名就相当于网站的代称。每个公司新上线的项目一般都会申请域名的,如果项目是部署在tomcat中的,那么如何进行配置呢?下边说一下其中的几种情况。同端口1一个域名对应一个项目注意:host节点中的appBase和Cont...

一文说清nginx规则匹配(含案例分析)

概述: 在nginx中,匹配分很多情形,例如:区分大小写匹配、不区分大小写匹配、有强匹配开头、有模糊匹配某些字符、有匹配后重写动作、有匹配反向代理动作、有匹配后终止操作、还有匹配全局变量类型等等,在很多情形中,匹配动作也存在优先策略,来看看下面的案例。案例一、 server { .............

docker安装php

本节将介绍在线使用Docker安装PHP解析器的步骤。通过本节的实操,您可以掌握从Docker环境的使用,PHP镜像以及Nginx服务器的拉取、导入、容器的启动的全部过程,从而具备使用Docker安装并部署PHP与ngninx的能力。本节要求您具备的基本能力有Linux,Docker,以及nginx...

nginx检查提示“unknown directive "stream" in /etc/*/nginx.conf”

yum安装nginx检查时提示“unknown directive "stream" in /etc/nginx/nginx.conf”yum安装nginx,在配置反代时,出现错误:nginx -tnginx: [emerg] unknown directive "strea...

Nginx安装、启动、停止、重载、查看

Nginx介绍Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在开源BSD-like 协议下发行。特点是占有内存少,并发能力强。1、安装 Nginx程序yum install nginx -y 或 dnf install nginx -y2、n...

Nginx如何配置正向代理:一步步教你轻松上手

Nginx作为一个高性能的HTTP和反向代理服务器,广泛应用于各类网站和服务中。然而,很多人可能不知道,Nginx同样可以配置为正向代理。今天我们就来详细讲解一下如何配置Nginx作为正向代理,让你的网络访问更加灵活便捷。什么是正向代理?正向代理是指客户端通过代理服务器访问目标服务器的过程。简单来说...