PHP-CLI - 如何减少启动PHP进程所需的内存使用量

时间:2014-07-09 10:32:17

标签: php memory command-line-interface

当PHP进程启动时,它会加载扩展,各种配置指令并创建全局/ env变量等,这些(我假设)会占用内存。

我的目标是引导一个简单的PHP脚本,该脚本使用尽可能少的内存来执行特定任务。

示例CLI脚本,例如:

printf("\nHello World");

上面的代码不依赖于任何$ _ENV变量或默认打开的某些PHP流,如果它们不存在,将使PHP进程使用更少的内存。

为了运行上面列出的代码,你们会做些什么来减少内存使用量?

2 个答案:

答案 0 :(得分:3)

为了获得几个字节,您可以在干净的环境中运行PHP代码:

env -i php -r 'var_dump(memory_get_peak_usage()); var_dump($GLOBALS);'

env -i在干净的环境中启动脚本。您可以通过转储$GLOBALS来查看差异。函数memory_get_peak_usage()显示脚本的最大消耗内存。但是在我的系统上,我用这种方法只获得了几KB。这取决于您的环境变量。

要真正优化内存占用,您必须查看已使用的扩展。要获取扩展路径,只需执行如下脚本:

php -r 'var_dump(ini_get("extension_dir"));'

您可能会找到一些像这样的扩展程序:

curl.so
gd.so
json.so
[...]

这些是可以使用dl()动态加载的扩展。他们没有进入你的内存使用。但是,如果您希望查看系统加载的每个扩展,可以使用以下命令:

php -m

比较这些列表,您会注意到,还有更多可用的扩展名。这些被编译成PHP。要减少内存占用,您必须从源代码编译PHP。

要优化PHP,您必须查看代码,以及您需要的扩展。为./configure获取正确的选项是一项耗时的任务。首先,请参阅http://www.php.net/manual/de/configure.about.php

通常,如果您需要特定的扩展名,您可以转到PHP手册并查看扩展的安装部分,对于zlib,这将是例如http://php.net/manual/de/zlib.installation.php

对于您的具体示例,您应该尝试从源代码编译PHP而不使用选项,并测试它是否满足您的需求。

答案 1 :(得分:0)

您可以尝试使用-n“将不使用php.ini文件”,这会阻止加载PHP的默认扩展名。

然后,您可以在脚本中使用dl(),例如dl('json.so')在运行时加载任何必需的扩展。

您还需要使用date_default_timezone_set()来阻止警告。