我有一个脚本,它可以发送数据(大小约为16MB)php://input.
$in = file_get_contents("php://input");
Run Code Online (Sandbox Code Playgroud)
但是我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();
Run Code Online (Sandbox Code Playgroud)
它将内存使用量从47MB减少到31MB.
还有什么我可以做的,让PHP在启动时消耗更少的内存?
它会给我更多的内存来处理我收到的数据.
有趣的是,启动时脚本占用了太多内存。但我建议您以一种可以使用较少内存的方式修改程序。
$in = file_get_contents("php://input");
会将所有输入数据加载到内存中,这很不好。而是尝试读取内存中的几个KB数据,对其进行处理,然后继续处理其余的数据,直到消耗完所有数据为止。
您可以使用http://php.net/manual/en/function.stream-get-line.php
| 归档时间: |
|
| 查看次数: |
2053 次 |
| 最近记录: |