首页 > 解决方案 > 为什么 DOMDocument 使用更多内存然后限制为 PHP 声明?

问题描述

我尝试通过将大型 XML 文件(超过 1GB)加载到 DOMDocument(Win/CLI PHP 8.0.3)中来检查它们的内存消耗。

我注意到在加载文件时进程使用的内存迅速增加:

$dom = new DOMDocument();
$dom->load($path);

使用的过程约。1GB XML 文件需要 3GB 内存。PHP 的内存限制设置为 128M。此外,PHP 几乎没有报告任何内存使用情况(memory_get_usage声明为 152 字节,实际为 0 字节)。执行 PHP 显示的 XPath 查询内存增加了 32MB。

SimpleXMLElement我在 Apache/PHP 上甚至在 Apache/PHP 上都观察到了类似的行为。

看起来 DOMDocument 和 SimpleXMLElement 使用了一些外部内存,这些内存包含在进程使用的内存中,而不是 PHP 使用的内存中。当我尝试使用 4GB XML 时,我触及了我的物理内存(16GB)的限制,但进程没有崩溃。

有谁知道为什么会这样以及在加载 XML 期间使用了什么内存?(或者也许你知道如何控制它......)

标签: phpxmlmemorylimitdomdocument

解决方案


推荐阅读