WAMP环境PHP.exe无法分配1G以上内存,memory_limit设为-1仍失效求助
从你的报错信息和测试脚本来看,核心问题是Windows环境下32位PHP进程的内存上限限制——即使你把memory_limit设为-1,32位PHP在Windows下的实际可用内存上限大概在1.2-1.5GB左右,这是系统层面的硬件架构限制,不是PHP配置能直接突破的。结合你的环境(PHP5.6.18 + WAMP3.1.3 + Windows7),大概率是你使用的是32位版本的PHP。
我给你一步步梳理排查和解决办法:
1. 先确认PHP的位数(32位/64位)
打开命令行,运行以下命令:
php -v
看输出结果里的标识:如果是x86就是32位,x64则是64位。比如:
PHP 5.6.18 (cli) (built: Jan 6 2016 13:24:17)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
如果没有x64字样,那32位PHP就是你内存受限的根源。
2. 针对性解决方案
方案一:切换到64位PHP版本
WAMP3.1.3支持64位PHP5.6版本,你可以:
- 打开WAMP管理器,找到
PHP->Version,查看是否有带x64后缀的PHP5.6版本可选; - 如果没有,去PHP官方下载对应版本的64位PHP包,手动添加到WAMP的
bin/php目录下,然后在WAMP管理器中切换版本。
切换后,64位PHP进程可以突破32位的内存限制,memory_limit=-1就能真正生效。
方案二:检查CLI版PHP的配置文件
有时候WAMP的WEB版PHP和CLI版PHP用的是不同的php.ini文件,你可能只修改了WEB版的配置。运行以下命令查看CLI加载的配置文件:
php --ini
输出会显示类似内容:
Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File: C:\wamp\bin\php\php5.6.18\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
确认Loaded Configuration File对应的文件里,memory_limit是否设置为-1,如果没有,修改后保存再重试。
方案三:临时给Composer分配最大内存
即使暂时不换PHP版本,你可以在运行Composer时直接指定内存参数,强制使用最大可用内存:
php -d memory_limit=-1 composer.phar update
这个命令会临时覆盖PHP的内存限制配置,优先使用这个参数。
方案四:优化Composer的内存占用
减少Composer的内存消耗也能缓解问题:
- 跳过开发依赖更新:
composer update --no-dev - 清理Composer缓存:
composer clear-cache - 只更新指定依赖:
composer update symfony/symfony(如果只需要更新Symfony核心)
3. 辅助检查:Windows虚拟内存设置
虽然不是主要原因,但可以确保系统虚拟内存足够:
- 右键「计算机」→「属性」→「高级系统设置」→「高级」→「性能」→「设置」→「高级」→「虚拟内存」;
- 选择「系统管理的大小」,或者手动设置一个较大的数值(比如2倍物理内存)。
附上你提供的报错信息以便参考:
Composer报错:
Fatal error: Out of memory (allocated 1397751808) (tried to allocate 268435456 bytes) in phar://C:/wamp/www/DESiwid/composer.phar/src/Composer/DependencyResolver/Solver.php on line 220 Segmentation fault
内存测试脚本报错:
set memory_limit to 810M memory limit is 810M try allocating 800 megabyte...pass.Usage: 800.5 Peak: 800.5 memory_limit (get value):849346560 set memory_limit to 860M memory limit is 860M try allocating 850 megabyte...pass.Usage: 850.5 Peak: 850.5 memory_limit (get value):901775360 set memory_limit to 910M memory limit is 910M try allocating 900 megabyte...pass.Usage: 900.5 Peak: 900.5 memory_limit (get value):954204160 set memory_limit to 960M memory limit is 960M try allocating 950 megabyte... Fatal error: Out of memory (allocated 262144) (tried to allocate 996147201 bytes ) in C:\wamp\www\_test\memory.php on line 5
内容的提问来源于stack exchange,提问作者VinZ

