PHP/Apache的内存上限

spi*_*nt0 19 php apache memory-limit

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

Fatal error: Out of memory (allocated 1827405824) (tried to allocate 88800 bytes)
Run Code Online (Sandbox Code Playgroud)

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

ini_set("memory_limit","3000M");
Run Code Online (Sandbox Code Playgroud)

这句话似乎确实正确地控制了内存使用量,但我似乎无法将其高于1.8GB.好像上限内存被限制在其他地方.我也加入了php.ini ...

memory_limit = 3000M
Run Code Online (Sandbox Code Playgroud)

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

我正在使用Xampp运行本地服务器.我有Windows 7,64位,4GB内存.我的脚本使用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
?>
Run Code Online (Sandbox Code Playgroud)

浏览器输出......

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
Run Code Online (Sandbox Code Playgroud)

我用一小块瓷砖和imagecreatetruecolor()使用的内存测试了这个,我估计我需要2.7GB

Ree*_*e45 9

您运行的是64位操作系统,但Apache和PHP可能仍然是32位.如果您使用的是mod_php,那么apache将成为限制因素.

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

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

据我所知,库使用情况不会显示在已提交的内存中,但仍会计入2GiB限制(很像设备内存计入32位窗口的4GiB限制.安装2 GiB图形卡时会带来低于2GiB的可用RAM).

最可能的解决方案 安装64位PHP,然后将其分发给它(可能使用system()调用)


小智 8

使用Acquia Dev Desktop,我有很多内存限制崩溃.

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

php_value memory_limit                  1024M
php_value max_execution_time            3000
Run Code Online (Sandbox Code Playgroud)

这个问题不太常见但仍然存在(特别是使用Feature Recreate)

进入我的httpd.conf,我将StackThread增加到了16M

ThreadStackSize 16*1024*1024
Run Code Online (Sandbox Code Playgroud)

它解决了内存崩溃问题.希望它可以提供帮助


Orb*_*ing 1

您使用的是哪个 PHP 版本?

memory_limit 变量现在或曾经包含在 32 位整数中,因此不能超过 2GB。

请参阅:http://bugs.php.net/bug.php? id=39132&edit=1

从该错误报告的底部评论来看,它可能是将人类可读形式转换为数字的例程,尝试将其转换为数字。