PHP/Apache 的内存上限

2022-08-30 17:15:06

我在运行PHP脚本时遇到错误....

Fatal error: Out of memory (allocated 1827405824) (tried to allocate 88800 bytes)

我已将此行添加到我的 PHP 脚本中。

ini_set("memory_limit","3000M");

这句话似乎确实正确地控制了内存使用量,但我似乎无法将其提高到大约1.8GB以上。就好像内存上限在其他地方受到限制一样。我还添加到了 php.ini...

memory_limit = 3000M

有谁知道内存是否在其他地方受到限制?

我正在运行一个带有Xampp的本地服务器。我有Windows 7,64位,4GB RAM。我的脚本使用PHP的GD图像库,当我尝试使用ImageCreateTrueColor()分配图像引用时,我收到错误。

(我知道这是一个巨大的内存 - 但这只是一个脚本,这样做要容易得多。

谢谢。

更新。。。。

@elusive @Orbling我希望每个人都对这个问题感到无聊,但这里有一个简化的代码来说明这个问题。

<?php
    ini_set("memory_limit","4000000000");
    echo "ini_get = " . ini_get('memory_limit') . "<br>\n";
    echo "memory_get_usage = " . memory_get_usage(true) . "<br>\n";
    $bigImageHandle = imagecreatetruecolor(22200, 24800);  //this is line 5
?>

浏览器输出...

ini_get = 4000000000
memory_get_usage = 524288

Fatal error: Out of memory (allocated 1843396608) (tried to allocate 88800 bytes) in
E:\User\My_Webs\experiments\houseshunting\temp\osMaps\t1.php on line 5

我用一组较小的磁贴和imagecreatetruecolor()使用的内存对此进行了测试,我估计我需要2.7GB


答案 1

使用 Acquia Dev Desktop,我遇到了许多内存限制崩溃。

将内存限制增加到 PHP 后.ini。

php_value memory_limit                  1024M
php_value max_execution_time            3000

此问题不太常见,但仍会发生(尤其是使用功能重新创建)

在我的httpd.conf中,我将StackThread增加到16M

ThreadStackSize 16*1024*1024

它解决了内存崩溃问题。希望它能有所帮助


答案 2

您运行的是 64 位操作系统,但 Apache 和 PHP 可能仍为 32 位。如果你使用mod_php,apache将是这里的限制因素。

32 位进程的 RAM 限制约为 2GiB,除非您使用了 /3GB 开关,并且软件知道支持 3GB。

这仍然留下了大约200 MiB,似乎未使用,但它足够小,可以被各种库使用,这些库都必须加载到内存中。

据我所知,库使用量不会显示在提交的内存中,但仍然计入2GiB限制(就像设备内存计入32位窗口的4GiB限制一样。安装2 GiB显卡可将可用RAM降至2GiB以下)。

最有可能的解决方案?安装一个64位PHP,然后将其调度到该PHP(也许使用system()调用)


推荐