Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Apache的内存上限_Php_Apache_Memory Limit - Fatal编程技术网

PHP/Apache的内存上限

PHP/Apache的内存上限,php,apache,memory-limit,Php,Apache,Memory Limit,当我运行我的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

当我运行我的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运行本地服务器。 我有Windows7,64位,4GB内存。 我的脚本使用PHP的GD图像库,在尝试使用ImageCreateTureColor()分配图像引用时出错

(我知道这是一个巨大的内存量,但这只是脚本的一部分,用这种方式做起来容易多了。)

谢谢

更新

@难以捉摸的@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
?>

我用一组较小的图块和ImageCreateTureColor()使用的内存对此进行了测试,我估计需要2.7GB,您使用的是哪个PHP版本

内存限制变量包含在32位整数中,因此不能超过2GB

见:

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

试试这个

set_time_limit(300);
ini_set('memory_limit', '20000M');
试试这个:

#php_value memory_limit 300M 
#php_value upload_max_filesize 200M 
#php_value post_max_size 200M 
#php_value max_execution_time 80000 
#php_value max_input_time 80000   
检查Apache配置(例如httpd.conf)。可能有一条指令限制了处理请求的子进程的内存

因此,您可以随心所欲地设置PHP限制,如果Apache生成了内存限制的进程,您不能超过这个限制

如果您使用的是托管服务,并且拥有共享服务器,则很可能您无权访问此配置,需要与提供商合作。正如您所看到的,它的配置适用于服务器范围。。。你不可能让他们改变这一点。同样,如果您希望生成比1.5IG更大的进程,那么您应该以不同的方式解决问题(其他人建议这样做),或者使用某种专用服务器(例如EC2)

例如:

/usr/local/apache/conf
#RLimitMEM 85643200 104857600   # Limit to: 80Mb / process, 100Mb total
RLimitMEM 134217728 537395200   # Limit to: 128Mb / Process, 512Mb total

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

32位进程的内存限制在2GB左右,除非您使用/3GB交换机,并且软件知道3GB支持

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

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


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

问题可能是由运行32位apache和PHP引起的。尝试将这些文件升级到64位二进制文件,看看是否可以解决问题。

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

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

php_value memory_limit                  1024M
php_value max_execution_time            3000
此问题不太常见,但仍在发生(尤其是在功能重建时)

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

ThreadStackSize 16*1024*1024
它解决了内存崩溃问题。 希望它能帮助您

尝试
ini\u设置('memory\u limit','-1')


检查PHP:PHP-v的版本
在我的例子中,我有PHP7.4
编辑文件:nano/etc/php/7.4/apache2/php.ini
搜索和更改内存\u限制=2048M
编辑文件:nano/etc/php/7.4/cli/php.ini
搜索和更改内存\u限制=2048M

最后:service apache2 restart

您确定同时需要如此大量的数据吗?你是在用成千上万的其他图片创作一幅图片吗?我同意“难以捉摸”的说法。你几乎肯定是做错了什么,需要这么多的内存。我正在用许多小图像制作一个大图像。要做到这一点,我需要分配一个大的图像参考-这是造成问题的原因。或者你是在暗示有一种方法可以将许多不需要大量内存的图像组合在一起?@spiderplant0:AFAIK,GD将其中一个小图像的内容复制到你的大图像上。您应该能够在复制小图像后释放其内存。您可以一次处理一个图像,并减少同时使用的总内存。大图像本身没有问题,因为它的内存只有大约88KB。问题是(显然)大量的小图像同时都在内存中。难以捉摸的是,我的代码结构是:(1)将所有小图像的文件名读入数组。(2) 计算大图像的大小并创建一个大图像(ImageCreateTureColor)。(3) 依次打开每个小图像并合并到大图像中(imagecopymerge)。步骤1之后的内存使用量仅为1048576字节。我在创建大图像的过程中出现内存故障,即在打开任何小图像之前,我应该将这些行放在哪里?互联网搜索建议其使用.htaccess?我似乎没有把这个文件放在xammp文件夹中?@Pradeep Singh:你为什么把它放在
#
,无论如何?我没有.htaccess文件,我应该在哪里创建这个文件然后在php.ini中添加upload\u max\u filesize=200M memory\u limit=300M upload\u max\u filesize=200M post\u max\u size=200M max\u execution\u time=100000 max\u input\u time=1000000谢谢Pradeep Singh。但为什么会有300米等?你是说3000米?我想你有可用的内存吧?你试过在php.ini中设置它吗?是的,我在两个地方都试过。我有4GB的物理内存。根据任务管理器的说法,44%在运行脚本之前就已经在使用了(尽管使用windows superfetch很难说)。虽然我认为它只会使用
ThreadStackSize 16*1024*1024