我有一个非常基本的脚本,可以抓取网站的数据。然后它对这些 URL 进行一些处理以提取数据。我正在使用以下内容:
use Guzzle\Http\Client;
use Guzzle\Plugin\Cookie\CookiePlugin;
use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;
use Symfony\Component\DomCrawler\Crawler;
我无法发布代码,因为它是专有的。如果我这样做,我工作的公司会解雇我。
我在脚本中有一个 Guzzle 客户端。我将这个对象重用于 HTTP 请求。
$client = new Client();
我使用 DomCrawler 从页面中抓取所需的数据。我遍历一长串 URL,从每个 URL 中抓取数据。
我到达了大约第 50 个 URL,并注意到内存在 32MB 处已耗尽。我不想增加内存限制,而是想真正找出造成这种情况的原因。
有没有办法强制 PHP 清除 Crawler 对象的内存?以及如何跟踪内存使用情况以查看内存的使用位置?
更新
我决定使用以下方法打印内存使用情况:
memory_get_usage(true)
...在处理数据之前和之后的循环内。似乎记忆似乎在不断增加,而且似乎永远不会下降。
这是输出。每个块都是循环的一次迭代。再次抱歉,我删除了网站 URL。由于我工作的公司,我不允许在这里发布它们。
Scraped: site.com/page
Processing page: 4194304
Processed page: 4980736
Scraped: site.com/page
Processing page: 4980736
Processed page: 5505024
Scraped: site.com/page
Processing page: 5505024
Processed page: 6029312
Scraped: site.com/page
Processing page: 6029312
Processed page: 6815744
Scraped: site.com/page
Processing page: 6815744
Processed page: 7340032
Scraped: site.com/page
Processing page: 7340032
Processed page: 7864320
Scraped: site.com/page
Processing page: 7864320
Processed page: 8388608
Scraped: site.com/page
Processing page: 8388608
Processed page: 9175040
Scraped: site.com/page
Processing page: 9175040
Processed page: 9699328
Scraped: site.com/page
Processing page: 9699328
Processed page: 10223616