当PHP进程启动时,它会加载扩展,各种配置指令并创建全局/ env变量等,这些(我假设)会占用内存。
我的目标是引导一个简单的PHP脚本,该脚本使用尽可能少的内存来执行特定任务。
示例CLI脚本,例如:
printf("\nHello World");
上面的代码不依赖于任何$ _ENV变量或默认打开的某些PHP流,如果它们不存在,将使PHP进程使用更少的内存。
为了运行上面列出的代码,你们会做些什么来减少内存使用量?
答案 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()
来阻止警告。