PhantomJS在150-180之后崩溃了

时间:2015-09-10 22:59:35

标签: crash phantomjs httprequest

我的脚本到目前为止工作正常,按顺序逐行加载文本文件中的每个页面(page.open是异步的,页面对象是全局=覆盖新请求,它是一个运行多个的大型集群) page.open()一次),匹配特定域的每个请求并从中打印JSON值。

但是如果我使用带有超过150个链接的.txt文件,它每次都会崩溃,大多数没有错误消息,也没有像这样的崩溃转储:

  

PhantomJS坠毁了。请阅读崩溃报告指南   http://phantomjs.org/crash-reporting.html并提交错误报告   https://github.com/ariya/phantomjs/issues/new。   不幸的是,没有可用的崩溃转储。   (%TEMP%(C:\ Users \ XXX \ AppData \ Local \ Temp)是一个你不能写的目录吗?)

如果我多次运行它,我可以很容易地重现这一点,如果我一次或一次地执行它并不重要。 我怎样才能防止崩溃?如果Phantom无法解决这个问题,我的脚本就没用了。

但有时候我会得到一个崩溃转储:

  

PhantomJS坠毁了。请阅读崩溃报告指南   http://phantomjs.org/crash-reporting.html并提交错误报告   https://github.com/ariya/phantomjs/issues/new。   请附上崩溃转储文件:   C:\ Users \用户XXX \应用程序数据\本地\ TEMP \ a4fd6af6-1244-44d3-8938-3aabe298c2fa.dmp

https://www.dropbox.com/s/i3qi5ed33mbblie/500%20links%20-a4fd6af6-1244-44d3-8938-3aabe298c2fa.dmp?dl=1

https://www.dropbox.com/s/najdz9fhdexvav1/500%20links-%2095ebab5c-859b-40e9-936b-84967471779b.dmp?dl=1

https://www.dropbox.com/s/1d2t8rtev85yf96/500%20links%20-%20d450c8e1-9728-41c7-ba52-dfef466f0222.dmp?dl=1

在极少数情况下我甚至会收到一条错误消息,Process Explorer表示该进程一次最多有21个线程

  

QThread :: start:无法创建thread()

console.log('Hello, world!');
var fs = require('fs');
var stream = fs.open('500sitemap.txt', 'r');
var webPage = require('webpage');
var i = 1;
var hasFound = Array();
var hasonLoadFinished = Array();

function handle_page(line) {
var page = webPage.create();
page.settings.loadImages = false;
page.open(line, function() {});

page.onResourceRequested = function(requestData, request) {
    var match = requestData.url.match(/example.de\/ac/g)
    if (match != null) {
        hasFound[line] = true;
        var targetString = decodeURI(JSON.stringify(requestData.url));
        var klammerauf = targetString.indexOf("{");
        var jsonobjekt = targetString.substr(klammerauf,     (targetString.indexOf("}") - klammerauf) + 1);
        targetJSON = (decodeURIComponent(jsonobjekt));
        var t = JSON.parse(targetJSON);
        console.log(i + "   " + t + "       " + t['id']);
        request.abort;
    } else {
        //hasFound = false;
        return;
    }

};
page.onLoadFinished = function(status) {    
    if (!hasonLoadFinished[line]) {
        hasonLoadFinished[line] = true;
        if (!hasFound[line]) {
            console.log(i + " :NOT FOUND: " + line);
            console.log("");
        }
        i++;
        setTimeout(page.close, 200);
        nextPage();
    }
}
};

function nextPage() {
var line = stream.readLine();
if (!line) {
    end = Date.now();
    console.log("");
    console.log(((end - start) / 1000) + " Sekunden");
    phantom.exit(0);
}
hasFound[line] = false;
hasonLoadFinished[line] = false;
handle_page(line);
}

start = Date.now();
nextPage();

1 个答案:

答案 0 :(得分:0)

/ edit在3836链接之后崩溃了1.9.8 ....回到开始...........

似乎问题就在于2.0版本。经过挫折测试后测试结果为1.9.8 - 它可以正常工作,使用的内存减少60%,1000个网址没有崩溃。

关于github的崩溃报告已经完成,这是一种解脱,它的工作原理。