【发布时间】:2017-02-24 12:46:17
【问题描述】:
我正在浏览器中运行一个 php 脚本。 php 脚本在消耗超过 600MB 字节后挂起。 httpd 使用 100% 的 CPU。日志文件中不会出现错误。我正在使用带有 php 5.4 的 xampp。为了简化问题,我测试了以下脚本:
<?php
set_time_limit(0);
ini_set('memory_limit', '1800M');
$b="";
for($i=0;$i<630000000;$i++)
{
$b.='a';
}
echo "completed!";
?>
脚本失败并出现以下错误: 致命错误:内存不足(已分配 320077824)(试图分配 319815657 字节) 我的系统有大约 1.5G 内存可用。怎么会这样?
【问题讨论】:
-
你到底想用这段代码做什么?
-
除了在内存中创建一个 630MB 的字符串(由于它是通过连接构建的,至少需要两倍)还有什么意义?尽量保持较低的内存使用率要好得多,因为分配新内存块的开销很大
-
检查为什么php不能从可用物理内存中分配内存
-
php如何连接字符串?如果您在 C# 中执行此操作,则不会扩展字符串值,而是会创建一个新字符串。所以旧值一直存在(占用内存),直到垃圾收集。
-
这个错误告诉你它已经分配了
320077824并试图分配一个额外的319815657,这将它推到了极限;所以内存限制设置在320077824和320077824+319815657之间的某个位置...这仍然远小于 1800MB
标签: php memory-management