【发布时间】:2013-10-28 03:40:19
【问题描述】:
我有一个脚本,用于发送数据(大约 16MB 大小),我使用 php://input 读取。
$in = file_get_contents("php://input");
但是我遇到了内存限制问题,所以我使用memory_get_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 在启动时消耗更少的内存?
这会给我更多的内存来处理收到的数据。
【问题讨论】:
-
我的 PHP 版本是 5.4.9
-
您可以增加 php ini 文件中的 memory_limit。有趣的问题!
-
我的提供商不会增加它。无论如何,我宁愿使用更少的内存,而不是仅仅增加限制。
-
您能否详细说明每次更改后的收益是多少?我的意思是“在执行 unset($variable); 我得到 2 kb,在 unset($other_variable); 我得到 2MB 之后”。你有加载模块的关系吗? 47 MB 是在您设置了一些变量之后,或者即使只有一个 memory_get_usage() 的空页面也是一样的?
-
对 PatomaS 的评论,您确定您的内存占用不是 40 k 而不是 40 M?在我的盒子上,我正在阅读 memory_get_usage() 返回一个以 bytes 为单位的值。