繁体   English   中英

Apache 和 Nginx 之间的 PHP 服务器更改:3 倍的性能损失

[英]PHP server change between Apache and Nginx: 3x performance loss

我们当前的基础设施与其他地方管理的 Apache + PHP 和 MySQL 一起工作得很好。 我没有在这台服务器上做任何特别的优化。 这些是初始配置。 除了 memory_limit 和 execution_time。 我正在将我们的基础设施更改为具有更大服务器和 Nginx + PHP-FPM 的更现代的东西。

在解决这个问题时,我意识到使用这个新的基础设施会造成很大的性能损失。 有更强大的服务器是一种耻辱,而且速度更慢。

我看着服务器负载,什么也没有。 内存和 CPU 仅占 2%

我拿出我的督察徽章,开始消除猜测。 显然,我的测试使用完全相同的案例、相同的框架、相同版本的应用程序,......

这是我的测试:

  1. 我安装在较新的 Apache + PHP 服务器上,实际上 Apache 甚至比 Nginx 还要慢(毫不奇怪:))。

  2. 我创建了一个简单的“hello wok”PHP 文件来测试它是否可以来自 Nginx。 所以我没有使用我们可能涉及的框架。 一切正常 TTFB 时间几乎相等(~ 24ms)。 新基础设施上的 Nginx 快了 2 毫秒。

  3. 在使用我们的框架时,我添加了一段基本代码,相当于使用我们的框架执行“Hello wok”。 啊,我们有问题。 最后 ! 旧的基础设施 61 毫秒,新的基础设施:184 毫秒。 因此,新的基础架构加载框架的速度要慢 3 倍。

显然,我对现有代码进行了大量优化,但看到这一点,我将永远无法优化它并将其速度提高 3 倍。 在所有情况下:为什么相同的代码在不同的环境中运行需要 3 倍的时间。

我现在唯一想到的是 PHP 和 PHP-FPM 配置问题。 在这些配置中,您是否知道任何可能导致这种放缓的原因?

显然,我寻找并测试了优化的东西,但它总是一样的。 这是我的 php.ini 文件:

date.timezone = Europe/Paris

opcache.enable = 0

apc.enabled = 1
apc.enable_cli = 1

upload_max_filesize = 128M
post_max_size = 128M

realpath_cache_size=4096k
realpath_cache_ttl=7200

display_errors = Off
display_startup_errors = Off
access.log = /proc/self/fd/2
error_log = /proc/self/fd/2
error_reporting = E_ALL ^ E_STRICT

; output_buffering=4096

pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 1000

max_execution_time=600
memory_limit = 2048M

opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 2048
; opcache.interned_strings_buffer = 32
; opcache.max_accelerated_files = 100000
; opcache.max_wasted_percentage = 15
opcache.revalidate_freq = 0
; opcache.validate_timestamps = 1

你有什么建议吗? 建议? 想法?

提前致谢 你过得好吗

编辑#1

服务器信息:

旧服务器:

VM with 1 processor / 2GB RAM
No database, just Apache + PHP
Framework specific cache system: file
$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 15
model       : 6
model name  : Common KVM processor
cpu MHz     : 3504.002
cache size  : 4096 KB
[...]

新服务器:

Docker container on a 3 processor / 4GB RAM server
I do not have the speeds of each processor. This is vCPU.
No database
Container PHP-FPM + Container Nginx
Framework specific cache system: APC
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7281 16-Core Processor
stepping        : 2
cpu MHz         : 2096.062
cache size      : 512 KB
[...]
processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7281 16-Core Processor
stepping        : 2
cpu MHz         : 2096.062
cache size      : 512 KB
[...]
processor       : 2
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7281 16-Core Processor
stepping        : 2
cpu MHz         : 2096.062
cache size      : 512 KB
[...]

其他:数据库在提供者中管理会话存储在数据库中

尽管你会在互联网上读到什么,但在低负载下,Apache+mod_php 比 nginx+php-fpm 快得多。 后一种架构提供了更好的容量和扩展性。 这并不能解释此处报告的性能差异。

关于这两种基础设施,您告诉我们的唯一一件事是,一种是旧的,一种是新的。 如果您对它们的了解只是单击了云控制面板中的一个按钮,那么可能很难找到更多信息(如果这是 Linux VM,请检查 /proc/cpuinfo 和 mpstat,特别注意窃取时间)。 您通过测试衡量的指标将高度依赖于单线程性能,这不是多 CPU 机器或任何重负载机器上吞吐量的良好指标。

但我首先要看的是存储延迟/增加 opcache.revalidate_freq。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM