首页 >后端开发 >php教程 >php-fpm调整:使用' pm static'用于最大性能

php-fpm调整:使用' pm static'用于最大性能

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原创
2025-02-09 08:25:13563浏览

PHP-FPM tuning: Using 'pm static' for Max Performance

关键要点

  • 对于内存充足的服务器,PHP-FPM 的 pm static 设置可提供高吞吐量和低延迟。此设置使 PHP-FPM 进程始终保持最大容量,能够快速响应流量峰值,无需生成新的进程。
  • 使用 pm static 需要仔细调整,以避免内存不足或缓存压力问题。pm.max_children 应根据服务器在不影响 CPU 性能的情况下能够处理的 PHP-FPM 进程最大数量来设置。
  • 对于具有多个 PHP-FPM 池或内存较低的服务器,pm dynamicpm ondemand 可能更合适。这些设置根据当前负载调整子进程的数量,可以节省内存,但也可能导致流量波动时的开销问题。
  • 无论选择哪种设置,定期监控和调整 PHP-FPM 配置对于获得最佳性能至关重要。PHP-FPM 进程的平均大小因服务器而异,需要手动调整并清楚地了解服务器的资源和流量模式。

文章原稿未经编辑,最初发表于 HaydenJames.io,经作者许可在此转载。

让我们快速了解如何最佳设置 PHP-FPM 以实现高吞吐量、低延迟以及更稳定的 CPU 和内存使用。默认情况下,大多数设置将 PHP-FPM 的 PM(进程管理器)字符串设置为 dynamic,如果遇到可用内存问题,通常建议使用 ondemand。但是,让我们根据 php.net 的文档比较这两个管理选项,并比较我最喜欢的用于高流量设置的选项——static pm:

  • pm = dynamic:子进程的数量根据以下指令动态设置:pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers
  • pm = ondemand:进程按需在请求时生成,这与 dynamic 不同,dynamic 在服务启动时启动 pm.start_servers
  • pm = static:子进程的数量由 pm.max_children 固定。

请参阅完整的全局 php-fpm.conf 指令列表以了解更多详细信息。

PHP-FPM 进程管理器 (PM) 与 CPUFreq 调节器的相似之处

这看起来可能有点离题,但我希望将其与我们的 PHP-FPM 调整主题联系起来。好的,我们都在某些时候遇到过 CPU 速度慢的问题,无论是笔记本电脑、虚拟机还是专用服务器。还记得 CPU 频率缩放吗?(CPUFreq 调节器。)这些设置在 nix 和 Windows 系统上都可用,可以通过将 CPU 调节器设置从 ondemand 更改为 performance* 来提高性能和系统响应能力。这次,让我们比较一下描述并寻找相似之处:

  • Governor = ondemand:根据当前负载动态缩放 CPU 频率。跳到最高频率,然后随着空闲时间的增加而降低频率。
  • Governor = conservative:根据当前负载动态缩放频率。比 ondemand 更平缓地缩放频率。
  • Governor = performance:始终以最大频率运行 CPU。

请参阅完整的 CPUFreq 调节器选项列表以了解更多详细信息。

注意到相似之处了吗?我想先使用这个比较,目的是找到最佳方法来撰写一篇文章,推荐将 PHP-FPM 的 pm static 作为您的首选。

对于 CPU 调节器,performance 设置是一个相当安全的性能提升,因为它几乎完全取决于您服务器 CPU 的限制。其他因素只有诸如热量、电池寿命(笔记本电脑)以及将 CPU 频率永久设置为 100% 的其他副作用。一旦设置为 performance,它确实是 CPU 最快的设置。例如,阅读关于 Raspberry Pi 上的 force_turbo 设置的信息,该设置强制您的 RPi 板使用 performance 调节器,由于 CPU 时钟速度低,性能改进更为明显。

使用 pm static 实现服务器的最大性能

PHP-FPM pm static 设置在很大程度上取决于服务器有多少可用内存。基本上,如果您遇到服务器内存不足的问题,那么 pm ondemanddynamic 可能是更好的选择。另一方面,如果您有足够的可用内存,则可以通过将 pm static 设置为服务器的最大容量来避免大部分 PHP 进程管理器 (PM) 开销。换句话说,当您进行计算时,pm.static 应设置为在不创建内存可用性或缓存压力问题的情况下可以运行的 PHP-FPM 进程的最大数量。此外,不要设置得太高以至于压垮 CPU(s) 并导致大量未处理的 PHP-FPM 操作。

PHP-FPM tuning: Using 'pm static' for Max Performance

在上图中,此服务器的 pm = staticpm.max_children = 100,最多使用约 10GB 的 32GB 已安装内存。请注意自解释的高亮列。在该屏幕截图期间,Google Analytics 中大约有 200 个“活跃用户”(过去 60 秒)。在这个级别,大约 70% 的 PHP-FPM 子进程仍然处于空闲状态。这意味着 PHP-FPM 始终设置为服务器资源的最大容量,而不管当前流量如何。空闲进程保持在线,等待流量峰值并立即响应,而不是必须等待 pm 生成子进程,然后在 pm.process_idle_timeout 到期后将其关闭。我已经将 pm.max_requests 设置得非常高,因为这是一个没有 PHP 内存泄漏的生产服务器。如果您对当前和未来的 PHP 脚本有 110% 的信心,则可以在 static 中使用 pm.max_requests = 0。但是,建议定期重新启动脚本。将请求数设置为一个较高的数字,因为重点是避免 pm 开销。例如,至少 pm.max_requests = 1000,具体取决于您的 pm.max_children 数量和每秒请求数。

该屏幕截图使用 Linux top,按“u”(用户)选项和 PHP-FPM 用户的名称进行过滤。显示的进程数量只有大约 50 个(没有计算),但基本上 top 显示适合您终端窗口的顶级统计信息——在本例中,按 %CPU 排序。要查看所有 100 个 PHP-FPM 进程,您可以使用以下命令:

<code>top -bn1 | grep php-fpm</code>

何时使用 pm ondemanddynamic

使用 pm dynamic,您可能已经注意到类似以下的错误:

<code>WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children</code>

您可能会尝试增加/调整设置,但仍然会看到与 Serverfault 帖子中某人描述的相同的错误。在这种情况下,pm.min 太低,并且由于网络流量随着低谷和峰值的波动而波动很大,因此很难正确调整 pm dynamic。通常的建议是使用 pm ondemand。但是,这更糟糕,因为当流量很少或没有流量时,ondemand 会将空闲进程关闭到 0,然后您最终会遇到与流量波动一样多的开销问题——除非,当然,您将空闲超时设置为极高……在这种情况下,您应该只使用 pm.staticpm.max_requests

但是,当您有多个 PHP-FPM 池时,PM dynamic,尤其是 ondemand 可以为您节省资源。例如,托管多个 cPanel 帐户或不同池下的多个网站。例如,我有一台服务器,拥有 100 多个 cPanel 帐户和大约 200 多个域名,pm.static 甚至 dynamic 都无法很好地执行。只有 ondemand 才能很好地执行,因为超过三分之二的网站几乎没有流量。使用 ondemand,这意味着所有子进程都将关闭,从而节省大量服务器内存!值得庆幸的是,cPanel 开发人员已经解决了这个问题,现在它默认为 ondemand。以前,由于默认情况下使用 dynamic,即使在空闲的 cPanel PHP-FPM 池/帐户上,它也使 PHP-FPM 成为共享服务器上的一个选项。如果您收到良好的流量,您不太可能托管在具有大量 PHP-FPM 池(共享主机)的服务器上。

结论

在 PHP-FPM 中,一旦您开始提供大量的流量,PHP-FPM 的 ondemanddynamic 进程管理器可能会由于固有的开销而限制吞吐量。了解您的系统,并将您的 PHP-FPM 进程设置为匹配服务器的最大容量。从基于 pm dynamicondemand 的最大使用量设置 pm.max_children 开始,然后增加到内存和 CPU 能够处理而不会不堪重负的程度。您会注意到,使用 pm static,因为您让所有内容都驻留在内存中,因此随着时间的推移,流量峰值会导致 CPU 的峰值减少,并且服务器的负载和 CPU 平均值将更加平滑。您的 PHP-FPM 进程的平均大小因 Web 服务器而异,需要手动调整,因此为什么更自动化的开销进程管理器——dynamicondemand——更受欢迎的建议。希望这篇文章对您有所帮助。

更新:添加了 A/B 基准比较图表。让 PHP-FPM 进程驻留在内存中有助于提高性能,但代价是增加内存使用量以使其处于等待状态。找到您的设置最佳点。

PHP-FPM tuning: Using 'pm static' for Max Performance

关于 PHP-FPM 调整的常见问题解答 (FAQ)

什么是 PHP-FPM,为什么它对我的服务器性能很重要?

PHP-FPM 或 FastCGI 进程管理器是另一种 PHP FastCGI 实现,它具有一些对任何规模的站点(尤其是一些繁忙的站点)有用的附加功能。它对服务器性能很重要,因为它允许服务器通过利用工作进程池来处理更多同时访问者的请求。这些进程负责解析 PHP 文件、生成动态内容并将其提供给客户端。通过有效地管理这些进程,PHP-FPM 可以显著提高服务器的性能和可扩展性。

PHP-FPM 如何提高我的网站性能?

PHP-FPM 通过有效管理 PHP 进程来提高网站性能。它使用主进程来控制多个子进程,这些子进程处理 PHP 脚本。这允许有效地使用服务器资源,因为可以终止空闲进程,并且可以根据需要生成新进程。此外,PHP-FPM 支持操作码缓存,这可以通过将预编译的脚本字节码存储在共享内存中来显着加快 PHP 执行速度,从而无需 PHP 在每次请求时加载和解析脚本。

PHP-FPM 中的 pm static 配置是什么,它如何影响性能?

PHP-FPM 中的 pm static 配置将子进程的数量设置为固定数量。这意味着始终会有特定数量的进程准备好为传入请求提供服务,而不管当前服务器负载如何。这可以在高负载下带来更好的性能,因为不需要生成新进程。但是,它也可能导致更高的内存使用率,因为即使不需要这些进程,它们也始终在运行。

如何调整 PHP-FPM 以获得最大性能?

调整 PHP-FPM 以获得最大性能涉及调整多个配置设置。这些设置包括确定要使用的进程管理器的 pm 设置,以及设置子进程最大数量的 pm.max_children 设置。其他重要设置包括 pm.start_serverspm.min_spare_serverspm.max_spare_servers,它们分别控制启动的服务器数量、空闲服务器的最小数量和最大数量。将这些设置调整为匹配服务器的资源和流量模式可以显着提高性能。

PHP-FPM 的一些常见问题是什么,我该如何对其进行故障排除?

PHP-FPM 的一些常见问题包括高 CPU 使用率、响应时间慢以及与达到子进程最大数量相关的错误。这些问题通常可以通过调整 PHP-FPM 配置设置来解决,例如增加 pm.max_children 设置或切换到不同的进程管理器。此外,监控工具可用于识别瓶颈和性能问题。

PHP-FPM 与其他 PHP 处理程序相比如何?

PHP-FPM 通常被认为比其他 PHP 处理程序更高效、更灵活。它支持各种进程管理器,可以根据服务器的资源和流量模式进行调整。此外,PHP-FPM 支持操作码缓存,并且可以处理大量同时请求,这使其成为繁忙站点的理想选择。

我可以将 PHP-FPM 与任何 Web 服务器一起使用吗?

是的,PHP-FPM 可以与任何支持 FastCGI 协议的 Web 服务器一起使用。这包括流行的 Web 服务器,如 Apache、Nginx 和 Lighttpd。

什么是操作码缓存,它如何提高 PHP 性能?

操作码缓存是一种通过将预编译的脚本字节码存储在共享内存中来提高 PHP 性能的技术。这无需 PHP 在每次请求时加载和解析脚本,从而缩短了执行时间。

如何监控 PHP-FPM 的性能?

有几种工具可用于监控 PHP-FPM 的性能。这些工具包括 PHP-FPM 状态页面(提供有关工作进程当前状态的信息)以及各种命令行工具,如 topps。此外,还有一些第三方监控解决方案提供更详细的指标和警报。

使用 PHP-FPM 的一些最佳实践是什么?

使用 PHP-FPM 的一些最佳实践包括:将进程管理器设置调整为匹配服务器的资源和流量模式;启用操作码缓存;定期监控性能以识别和解决问题。此外,务必使 PHP-FPM 和 Web 服务器软件保持最新状态,以利用最新的性能改进和安全修复。

以上是php-fpm调整:使用&#x27; pm static&#x27;用于最大性能的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn