PhantomJS - Script crasht nach ~170 Urls

Commodo

Neu angemeldet
Registriert
17 Mai 2014
Beiträge
149
/edit2 Kommando zurück, nach 3836 Links ohne Fehlermeldung abgestürzt.

/edit hab aus Verzweifelung mal die alte 1.9.8er Version ausprobiert statt der neuen 2.0.
Und es funktioniert, sogar mit 60% weniger RAM, kein Crash bei 500 oder 1000 Seiten, alles tutti :m.
Niemals eine .0er Version im Produktiveinsatz .....

Wenn ich meine Textdatei mit 500 Seiten starte, crasht das Script 100% reproduzierbar zwischen 160-180 Urls, meistens ohne Fehlermeldung und Dump, manchmal mit Dump, alle paar Jubeljahre sogar mit einer Fehlermeldung.

Bei Github ist tote Hose, da hab ich schon gepostet, ebenso bei Stackoverflow aber da weiss auch keiner so recht wieso weshalb warum bisher und ich häng an diesem Mist schon seit gut 2 Wochen, vielleicht weiss ja jemand von euch was.

PhantomJS has crashed. Please read the crash reporting guide at and file a bug report at . Unfortunately, no crash dump is available. (Is %TEMP% (C:\Users\XXX\AppData\Local\Temp) a directory you cannot write?)

PhantomJS has crashed. Please read the crash reporting guide at and file a bug report at . Please attach the crash dump file: C:\Users\XXX\AppData\Local\Temp\a4fd6af6-1244-44d3-8938-3aabe298c2fa.dmp






QThread::start: Failed to create thread ()

Code:
Expand Collapse Copy
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();
 
Zuletzt bearbeitet:
Vl hält die Version 2.0 die Session zur Website offen und benötigt explizit ein Close? Das würde zumindest erklären warum du so einen hohen Speicherbedarf hast.
 
  • Thread Starter Thread Starter
  • #3
Das soll ja eigentlich mit setTimeout(page.close, 200); gemacht werden?

Lass die beiden grade nochmal mit

Code:
Expand Collapse Copy
else {
	    request.abort;
            //return;
        }

Code:
Expand Collapse Copy
page.close();
ohne Timeout

durchlaufen.

1.9.8 hat 130Mb bei ~200 Links, 2.0 hat 350Mb bei 40 Links und steigt bis auf 850, irgendwas hakt da in der neuen Version.

Nachtrag - teste grade nochmal mit 12500 Links:
1.9.8 stabil mit ~690Mb bei 3500 Links soweit.

--- [2015-09-11 12:32 CEST] Automatisch zusammengeführter Beitrag ---

Kommando zurück, nach 3836 Links ohne Fehlermeldung abgestürzt.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #4
SlimerJS und CasperJS das gleiche, 1000-4000 Links und sie crashen.
Stackoverflow und die offiziellen IRC Channels nützen auch nichts.

Ich biete 10-20€ wenn mir jemand das zum laufen bringt (Banküberweisung, Visa Prepaid, Paysafecard, Cash wenn ihr im Ruhrpott wohnt), ich weiss nicht mehr weiter :(.
 
  • Thread Starter Thread Starter
  • #6
Weil ich einen Headless Browser mit Javascript-Unterstützung brauche, da der Request den ich matchen will per JS gefeuert wird.

Und da ist PhantomJS halt #1.

Wenn du irgendeine Idee hast wie ich die Info für 12500 Links sonst bekomme immer her damit :beer:.
 
Zurück
Oben