在脚本启动时最小化PHP内存使用

在脚本启动时最小化PHP内存使用,php,memory,Php,Memory,我有一个脚本,用于发送数据(大约16MB大小),我使用php://input $in = file_get_contents("php://input"); 但是我遇到了内存限制问题,所以我使用memory\u get\u usage()进行了跟踪,发现脚本在启动时(在发出任何命令之前)已经消耗了47MB内存 我的猜测是,这是由于PHP预先归档了全局变量。所以我正在寻找一种方法来解决这些问题,因为我只是在阅读php://input 小溪 我试过: unset($GLOBALS); unset(

我有一个脚本,用于发送数据(大约16MB大小),我使用
php://input

$in = file_get_contents("php://input");
但是我遇到了内存限制问题,所以我使用
memory\u get\u usage()
进行了跟踪,发现脚本在启动时(在发出任何命令之前)已经消耗了47MB内存

我的猜测是,这是由于PHP预先归档了全局变量。所以我正在寻找一种方法来解决这些问题,因为我只是在阅读php://input 小溪

我试过:

unset($GLOBALS);
unset($_SERVER);
unset($_GET);
unset($_POST);
unset($_FILES);
unset($_REQUEST);
unset($_ENV);
unset($_COOKIE);
unset($HTTP_RAW_POST_DATA);
unset($http_response_header);
unset($argc);
unset($argv);
gc_collect_cycles();
它将内存使用量从47MB减少到31MB

我还能做些什么,让PHP在启动时消耗更少的内存吗


它会给我更多的内存来处理我收到的数据。

有趣的是,在启动时,您的脚本占用了这么多内存。但是我建议你修改你的程序,使它可以用更少的内存工作

$in=文件获取内容(“php://input");

将加载内存中的所有输入数据,这是错误的。相反,尝试读取内存中的几KB数据,对其进行处理,然后继续处理其余的数据,直到消耗完所有数据


您可以使用

您的服务器上是否启用了xDebug?它可以再做一次这样的扩展。phpinfo()将告诉您安装了哪些扩展

像这样的简单脚本的内存使用情况如何

<?php 
echo memory_get_usage(false) . "\n";
echo memory_get_usage(true) . "\n";
echo "test\n";
?>

查看脚本中加载的所有变量。

使用
内容类型:application/json发送数据


PHP不会设置$\u POST变量。

如果您的配置和硬件允许,您可以在运行时增加内存限制:

ini_set('memory_limit', '128M');
或者通过.htaccess或apache配置增加它,如下所示:

php_value memory_limit 128M

我的PHP版本是5.4.9,您可以增加PHP ini文件中的内存限制。有趣的问题!我的供应商不会增加它。不管怎样,我宁愿使用更少的内存,而不仅仅是增加限制。你能提供每次更改后获得的详细信息吗?。我的意思是“在执行unset($variable)之后;我得到了2kb,在unset($other_variable)之后;我得到了2MB”。您是否有已加载模块的关系?47 MB是在您设置了一些变量之后出现的,或者即使只有一个内存使用量()的空页面也是一样的?关于PatomaS的评论,您确定您的内存占用不是40 k,而是40 M吗?在我的盒子上,我正在读取我得到的数据,这些数据是JSON编码的。Afaik没有串行json解码函数。除非我自己构建一个,否则我需要获取所有数据。如果是这样的话,那么你可以尝试使用这个库来解析JSON。看看这能帮什么忙。但我认为在启动时尽量减少内存使用也是个好主意。因为它占用了47,100 MB的内存限制,这已经是脚本拥有的内存的一半。
php_value memory_limit 128M