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

时间:2013-10-19 08:41:27

标签: php memory

我有一个脚本,可以发送数据(大小约为16MB),我使用php://input阅读。

$in = file_get_contents("php://input");

但是我遇到内存限制问题,所以我使用memory_get_usage()跟踪它,并意识到脚本在启动时已经消耗了47MB内存(在发出任何命令之前)。

我的猜测是,这是由于PHP预先归档全局变量。所以我正在寻找一种方法来取消这些,因为我只是在阅读php://输入流。

我试过了:

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在启动时消耗更少的内存?

这会让我有更多的记忆来处理我收到的数据。

4 个答案:

答案 0 :(得分:4)

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

$in = file_get_contents("php://input");

会将所有输入数据加载到内存中,这很糟糕。而是尝试在内存中读取几KB的数据,处理它并继续处理其余的数据,直到消耗掉所有数据为止。

您可以使用http://php.net/manual/en/function.stream-get-line.php

答案 1 :(得分:2)

您的服务器上是否启用了xDebug?它可以像这样的另一个扩展。 phpinfo()会告诉你安装了哪些扩展。

这样的简单脚本的内存使用量是多少
<?php 
echo memory_get_usage(false) . "\n";
echo memory_get_usage(true) . "\n";
echo "test\n";
?>

也可以尝试

var_dump(get_defined_vars()); 

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

答案 2 :(得分:0)

使用Content-Type: application/json

发送数据

PHP不会设置$ _POST变量。

答案 3 :(得分:0)

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

ini_set('memory_limit', '128M');

或通过.htaccess或apache配置增加它,如下所示:

php_value memory_limit 128M