调整 PHP-FPM 以获得超高的服务器性能

这篇文章提供了一个关于如何通过调整 PHP-FPM 设置来优化服务器内存使用并提高性能的逐步指南。

步骤 1:确定 PHP-FPM 进程的内存使用情况

  • 运行以下命令以显示按 RSS(常驻集大小,即进程实际使用的物理内存量)排序的 php-fpm 进程:
   ps -ylC php-fpm7.3 --sort:rss 
  • 注意每个 php-fpm 进程使用的内存量(以 KB 或 GB 为单位)。

步骤 2:估算其他进程的内存消耗

  • 运行 top 命令。
  • 按三次 < 键以按 RES(常驻内存大小)排序。
  • 确定 MySQL 和 Apache 等其他进程使用的内存量。

步骤 3:为 PHP-FPM 分配内存

  • 根据服务器上的可用内存和步骤 1 和 2 中确定的内存使用情况,为 PHP-FPM 分配一定数量的内存。
  • 例如,如果您可以为 PHP-FPM 分配 2GB 内存,并且每个进程使用 0.15GB,则可以运行大约 13 个子进程 (2 / 0.15 = 13.33)。

步骤 4:配置 PHP-FPM

  • 打开 PHP-FPM 配置文件:
   sudo nano /etc/php/7.x/fpm/pool.d/www.conf
  • 找到以下设置并根据您的计算结果进行调整:
    • pm = dynamic:将此设置为 dynamic 以允许 PHP-FPM 根据需要动态调整子进程的数量。
    • pm.max_children = 12:设置 PHP-FPM 可以创建的最大子进程数。
    • pm.min_spare_servers = 2:设置空闲状态下保持的最小服务器进程数。
    • pm.max_spare_servers = 4:设置空闲状态下保持的最大服务器进程数。
    • pm.start_servers = 12:设置 PHP-FPM 启动时启动的服务器进程数。
    • pm.max_requests = 500:设置每个子进程在重启之前可以处理的最大请求数,以防止内存泄漏。

步骤 5:保存并重新启动 PHP-FPM

  • 保存配置文件。
  • 重新启动 PHP-FPM 以使更改生效:
   sudo service php7.3-fpm restart

步骤 6:监控内存使用情况

  • 在进行更改后,请持续监控服务器的内存使用情况,以确保 PHP-FPM 性能最佳,并且不会导致内存不足的问题。

在 PHP 8 中,您无法完全关闭垃圾回收(GC)机制。

PHP 的垃圾回收器是其内存管理的核心部分,对于确保脚本运行时的稳定性和防止内存泄漏至关重要。

尽管您无法禁用 GC,但您可以通过以下方式影响其行为:

  • gc_disable() 函数: 这个函数可以暂时禁用垃圾回收器的运行。 然而,这并不会阻止 PHP 引擎跟踪引用计数。 一旦 gc_enable() 被调用或者脚本结束,垃圾回收器会重新启动并清理不再需要的变量。
  • 修改 php.ini 配置文件: 您可以调整 zend.enable_gc=Off 来禁用循环引用收集器。 将其设置为 Off 会阻止 PHP 引擎检测和清理循环引用,但这可能会导致潜在的内存泄漏,尤其是在处理大量对象和复杂数据结构时。

重要提示:

  • 强烈建议不要尝试完全禁用 PHP 的垃圾回收机制。 这样做可能会导致不可预测的行为,包括内存泄漏、性能下降,甚至导致 PHP 进程崩溃。
  • 如果您在脚本运行期间遇到与 GC 相关的性能问题,请先尝试优化代码以减少对象创建和循环引用的数量,而不是尝试禁用 GC。

发表评论