【问题标题】:PHP Memory exhausted at 32MBPHP 内存耗尽为 32MB
【发布时间】:2013-07-06 05:37:17
【问题描述】:

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

【问题讨论】:

标签: php symfony guzzle


【解决方案1】:

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

搜索

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

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

【讨论】:

  • 我知道这一点,但我不确定一个简单的网络爬虫是否应该在 32MB 时耗尽。
  • 我不确定如何跟踪确切的内存。如果您担心内存不足可能不是导致此问题的原因,请检查是否存在未闭合的循环。
  • 代码中唯一的循环是遍历 URL 列表的循环。可以抓取任意数量的 URL,但我目前使用的列表有 148 行。它在第 50 行排气。
  • 您使用的是什么 html 解析器?在使用简单的 html DOM 解析器之前,我遇到了类似的问题。查看这个问题以获得更多帮助。 stackoverflow.com/questions/16627637/…
  • 我正在使用 Symphony 的 Dom Crawler。
猜你喜欢
  • 2015-10-01
  • 2014-09-08
  • 2014-06-28
  • 2011-04-20
  • 1970-01-01
  • 2011-10-01
  • 2013-07-22
  • 2014-06-30
相关资源
最近更新 更多