2

我有一个非常基本的脚本,可以抓取网站的数据。然后它对这些 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
4

1 回答 1

0

增加 php.ini 文件中的内存限制

搜索

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M

在您的 php.ini 文件中并将其增加到 512M

于 2013-07-08T19:21:48.543 回答