PHP内存耗尽32MB

时间:2013-07-08 19:15:16

标签: php symfony guzzle

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

...在处理数据之前和之后的循环内。似乎记忆似乎不断增加,似乎永远不会消失。

这是输出。每个块都是循环的单次迭代。再说一遍,抱歉,我删除了网站网址。由于我工作的公司,我不允许在这里发帖。

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

1 个答案:

答案 0 :(得分:0)

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

搜索

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

并将其增加到512M