清理资源


Clearing resources

是否可以清除PHP中的所有资源?

我知道使用get_defined_vars可以获得所有定义的函数使用unset,您可以轻松地清除这些资源。

但这对我来说还不够。我有一个运行很长时间(~1h30m)的脚本来执行许多函数。。但在执行过程中,脚本收集了不再重要的信息。。脚本导出产品,每个产品(3200个产品)的大约为0.2MB-0.5MB

这相当于超过6亿字节的内存使用量。我尽我所能优化了这个脚本,但我没有把它缩小。

我可以使用get_included_files或get_declared_classes获取所有包含的文件;有可能清除这些信息吗?删除类(除了一些必需的类,如自动加载器类)或其他包含的文件,以便我可以释放更多的RAM?

或者,您知道在执行时优化服务器使用率的其他方法吗?

也许这是一个愚蠢的问题,但我很乐意得到每一个提高PHP脚本性能的提示。

脚本环境信息:脚本运行在旧的Magento 1.4版本上,该版本在缓存和性能方面存在巨大问题;目前不可能更新到新版本。

我们有一个脚本,它消耗了高达2GB的内存,并疯狂地泄露了内存(它使用了条令1.1)

在尽可能多地添加unset()ing之后,我们将gc_enable()添加到脚本的顶部,并将gc_collect_cycles()添加到战略位置。

这确实有助于回收一些使用过的内存,但确实使脚本的速度减慢了一小部分。

您有很多清除资源/内存的操作:

可变的unset()

SQL 的mssql_free_result

memory_get_usage()表示当前分配给PHP脚本的内存量(以字节为单位)。

等等。。。

如果将所有内容混合,则可以减少内存/resource。

问题不在于变量,而在于算法。

In think脚本将所有值累积到一个大的"产品对象"数组中,该数组将在导出的文件中序列化。

为了精通内存,最好在构建后序列化每个产品,而不是在序列化之前将所有产品累积导出到数组中。