调整 PHP-FPM 以获得超高的服务器性能 2024-06-05 作者 C3P00 这篇文章提供了一个关于如何通过调整 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。
这篇文章提供了一个关于如何通过调整 PHP-FPM 设置来优化服务器内存使用并提高性能的逐步指南。
步骤 1:确定 PHP-FPM 进程的内存使用情况
步骤 2:估算其他进程的内存消耗
top
命令。<
键以按 RES(常驻内存大小)排序。步骤 3:为 PHP-FPM 分配内存
步骤 4:配置 PHP-FPM
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
步骤 6:监控内存使用情况
在 PHP 8 中,您无法完全关闭垃圾回收(GC)机制。
PHP 的垃圾回收器是其内存管理的核心部分,对于确保脚本运行时的稳定性和防止内存泄漏至关重要。
尽管您无法禁用 GC,但您可以通过以下方式影响其行为:
gc_enable()
被调用或者脚本结束,垃圾回收器会重新启动并清理不再需要的变量。zend.enable_gc
=Off 来禁用循环引用收集器。 将其设置为 Off 会阻止 PHP 引擎检测和清理循环引用,但这可能会导致潜在的内存泄漏,尤其是在处理大量对象和复杂数据结构时。重要提示: