如何调整XAMPP中PHP的垃圾回收策略设置?

2026-05-06 18:531阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计764个文字,预计阅读时间需要4分钟。

如何调整XAMPP中PHP的垃圾回收策略设置?

Examining the provided content, here's a simplified rewrite:

EXAMPMP is set to default with PHP and garbage collection mechanisms, inheriting PHP's default behavior during compilation (as shown in the code `zend.enable_gc=1`). However, you can adjust several key parameters in the `php.ini` file to practically modify GC's development strategies.

确认当前 XAMPP 使用的 php.ini 路径

很多人改错文件,结果重启 Apache 也无效。XAMPP 的 PHP 配置不是用系统级或用户级的 php.ini,而是用 XAMPP 自带的那份:

  • Windows:通常在 XAMPP\php\php.ini(不是 XAMPP\apache\bin\php.ini
  • macOS/Linux:在 /Applications/XAMPP/xamppfiles/etc/php.ini 或类似路径
  • 务必用 phpinfo() 页面里的 Loaded Configuration File 行确认真实路径

修改 gc_probability 和 gc_divisor 控制触发频率

这两个参数决定「每多少次请求触发一次 GC」,不是开关,而是概率采样机制。默认值是 gc_probability = 1gc_divisor = 100,即平均每 100 次请求触发一次。

  • 想更激进(适合内存敏感长脚本):gc_probability = 100 + gc_divisor = 1 → 每次请求都运行 GC
  • 想更保守(适合高并发短请求):gc_probability = 0 → 彻底禁用自动 GC(但不推荐)
  • 注意:gc_probability = 0 不等于关闭 GC 算法,只是跳过自动采样;仍可通过 gc_collect_cycles() 手动触发

禁用或启用 GC 的底层开关 zend.enable_gc

这是真正控制垃圾回收器是否加载的布尔开关,和上面两个参数正交:

立即学习“PHP免费学习笔记(深入)”;

  • 设为 zend.enable_gc = Off:PHP 启动时不初始化 GC 数据结构,gc_collect_cycles() 会返回 0,且无法再启用
  • 设为 zend.enable_gc = On(默认):GC 子系统就绪,可响应自动/手动触发
  • 修改后必须重启 Apache(不是仅 reload),否则不生效

验证修改是否生效

别只信配置文件,运行一段测试代码确认行为变化:

<?php var_dump(gc_enabled()); // 应返回 bool(true/false) var_dump(ini_get('zend.enable_gc')); var_dump(ini_get('gc_probability')); var_dump(ini_get('gc_divisor')); ?>

再跑一个循环引用测试:

<?php $a = ['x' => 1]; $b = ['y' => 2]; $a['ref'] = &$b; $b['ref'] = &$a; unset($a, $b); echo memory_get_usage() . "\n"; gc_collect_cycles(); // 手动触发,看是否释放 echo memory_get_usage() . "\n"; ?>

如果 zend.enable_gc = Off,第二行内存几乎不会下降;如果 gc_probability=0zend.enable_gc=On,手动调用仍有效。

最容易被忽略的是:XAMPP 多环境共存时(如同时装了多个版本 PHP),php -v 命令行用的可能是另一份 php.ini,而 Apache 用的是 XAMPP 自带的——调试时务必分清上下文。

标签:xamppPHP

本文共计764个文字,预计阅读时间需要4分钟。

如何调整XAMPP中PHP的垃圾回收策略设置?

Examining the provided content, here's a simplified rewrite:

EXAMPMP is set to default with PHP and garbage collection mechanisms, inheriting PHP's default behavior during compilation (as shown in the code `zend.enable_gc=1`). However, you can adjust several key parameters in the `php.ini` file to practically modify GC's development strategies.

确认当前 XAMPP 使用的 php.ini 路径

很多人改错文件,结果重启 Apache 也无效。XAMPP 的 PHP 配置不是用系统级或用户级的 php.ini,而是用 XAMPP 自带的那份:

  • Windows:通常在 XAMPP\php\php.ini(不是 XAMPP\apache\bin\php.ini
  • macOS/Linux:在 /Applications/XAMPP/xamppfiles/etc/php.ini 或类似路径
  • 务必用 phpinfo() 页面里的 Loaded Configuration File 行确认真实路径

修改 gc_probability 和 gc_divisor 控制触发频率

这两个参数决定「每多少次请求触发一次 GC」,不是开关,而是概率采样机制。默认值是 gc_probability = 1gc_divisor = 100,即平均每 100 次请求触发一次。

  • 想更激进(适合内存敏感长脚本):gc_probability = 100 + gc_divisor = 1 → 每次请求都运行 GC
  • 想更保守(适合高并发短请求):gc_probability = 0 → 彻底禁用自动 GC(但不推荐)
  • 注意:gc_probability = 0 不等于关闭 GC 算法,只是跳过自动采样;仍可通过 gc_collect_cycles() 手动触发

禁用或启用 GC 的底层开关 zend.enable_gc

这是真正控制垃圾回收器是否加载的布尔开关,和上面两个参数正交:

立即学习“PHP免费学习笔记(深入)”;

  • 设为 zend.enable_gc = Off:PHP 启动时不初始化 GC 数据结构,gc_collect_cycles() 会返回 0,且无法再启用
  • 设为 zend.enable_gc = On(默认):GC 子系统就绪,可响应自动/手动触发
  • 修改后必须重启 Apache(不是仅 reload),否则不生效

验证修改是否生效

别只信配置文件,运行一段测试代码确认行为变化:

<?php var_dump(gc_enabled()); // 应返回 bool(true/false) var_dump(ini_get('zend.enable_gc')); var_dump(ini_get('gc_probability')); var_dump(ini_get('gc_divisor')); ?>

再跑一个循环引用测试:

<?php $a = ['x' => 1]; $b = ['y' => 2]; $a['ref'] = &$b; $b['ref'] = &$a; unset($a, $b); echo memory_get_usage() . "\n"; gc_collect_cycles(); // 手动触发,看是否释放 echo memory_get_usage() . "\n"; ?>

如果 zend.enable_gc = Off,第二行内存几乎不会下降;如果 gc_probability=0zend.enable_gc=On,手动调用仍有效。

最容易被忽略的是:XAMPP 多环境共存时(如同时装了多个版本 PHP),php -v 命令行用的可能是另一份 php.ini,而 Apache 用的是 XAMPP 自带的——调试时务必分清上下文。

标签:xamppPHP