我正在与有内存问题的 php 作斗争。脚本终止并显示以下消息: PHP Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 3027408 bytes) in test.php on line 9我创建了一个小测试脚本:<?phpfunction memstat($file, $line) { $memlog = fopen('mem.log', "a+"); fwrite($memlog, sprintf('mem @ %s %d: %d (%d; peek: %d)'.PHP_EOL, $file, $line, memory_get_usage(), memory_get_usage(true), memory_get_peak_usage())); fclose($memlog);}memstat(__FILE__, __LINE__);$str = str_pad('', 1523687, ' ');memstat(__FILE__, __LINE__);print 'end '.strlen($str);?>该脚本在 php 7.4 上运行不会崩溃,但是当我将 str_pad 长度参数增加到 1523688 时,它就会终止并显示上述消息。这个脚本在php7.2上运行,当长度参数为1515495时,但当长度参数为1515496时崩溃。我在同一服务器上用php5.6测试它,运行没有任何问题。无论我如何运行它,apache 还是 cli,脚本都会崩溃。修改ini后apache已经重新启动,这不是问题。我用 2GB memory_limit 对其进行了测试,并且收到了相同的错误消息。仅当我将 memory_limit 更改为 -1 时,它才有效,但我认为这不是正确的解决方案,我的意思是,如果 512MB 对于这个小脚本来说不够,那就有问题了。在我看来,php 在开始运行时分配了 2097152 内存,第一次尝试分配更多系统内存时它崩溃了。在我自己的电脑上同样的apache和php 7版本,没有问题。环境:处理器:Intel Xeon E5-2620内存:8GB适用于:Win10专业版64位Web 服务器:Apache/2.4.29 (Win64) Apache Lounge VC11 服务器构建时间:2017 年 11 月 6 日 11:17:28PHP:7.4.8 和 7.2.32有人知道什么会导致这样的错误吗?编辑皮兰写了一个略有不同的剧本。我在有问题的计算机上执行了脚本,结果如下:string(3) "2GB"mem @ C:\web\test.php 15: 0.37 MB (2.00 MB; peak: 0.41 MB)Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 10000024 bytes) in C:\web\test.php on line 16正如你所看到的,内存限制是 2GB,当它尝试分配超过 2MB 时,它仍然会死掉。
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
看看你的memory_limit
. 错误说Allowed memory size of 2097152 bytes exhausted
。哪个不是2GB
console.log(2097152 / 2**20 + "MB");
var_dump(ini_get('memory_limit'));
function memstat($file, $line) {
echo sprintf(
'mem @ %s %d: %.2f MB (%.2f MB; peak: %.2f MB)' . PHP_EOL,
$file,
$line,
memory_get_usage() /2**20,
memory_get_usage(true) /2**20,
memory_get_peak_usage() /2**20
);
}
memstat(__FILE__, __LINE__);
$str = str_pad('', 9999999, ' ');
memstat(__FILE__, __LINE__);
print 'end '.strlen($str);
工作示例。
输出
string(3) "64M"
mem @ /in/BHqWd 16: 0.37 MB (2.00 MB; peak: 0.41 MB)
mem @ /in/BHqWd 18: 9.91 MB (11.54 MB; peak: 9.91 MB)
end 9999999
- 1 回答
- 0 关注
- 77 浏览
添加回答
举报
0/150
提交
取消