我有一个非常基本的脚本,可以在网站上搜索数据。然后,它会对这些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
答案 0 :(得分:0)
增加php.ini文件中的内存限制
搜索
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
在php.ini文件中并将其增加到512M