我有一个脚本,可以发送数据(大小约为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在启动时消耗更少的内存?
这会让我有更多的记忆来处理我收到的数据。
答案 0 :(得分:4)
有趣的是,在启动时,您的脚本占用了大量内存。但我建议你修改你的程序,以便它可以用更少的内存工作。
$in = file_get_contents("php://input");
会将所有输入数据加载到内存中,这很糟糕。而是尝试在内存中读取几KB的数据,处理它并继续处理其余的数据,直到消耗掉所有数据为止。
答案 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