2013-05-22 16 views
7

Ich PhantomJS im Remote-Modus mit WebDriver phantomjs --webdriver 8910 ausgeführt wird und dann viele Seiten mit der Selenium Python-Anbindung mit so etwas wie immer:Limit Speicherverbrauch von Phantomjs mit Selen-Webdriver?

wd = webdriver.PhantomJS(port=8910) 
for url in big_url_list: 
    wd.get(url) 
    # do something here, e.g. wd.save_screenshot or print wd.page_source 
    wd.quit() 

Die wd.quit() scheint nichts zu tun. Die Überwachung des Prozesses mit dem oberen Rand zeigt, dass die Speicherauslastung des phantomjs-Prozesses weiter ansteigt, je mehr Seiten abgerufen werden. Wenn ich den phantomjs-Prozess neu starte, sinkt die Speicherauslastung und beginnt wieder stetig zu steigen.

Die close method mentioned in the phantomjs docs klingt vielversprechend, aber ich sehe keine Möglichkeit, das über die WebDriver protocol zu nennen.

Gibt es (i) eine Möglichkeit, die Speicherauslastung von phantomjs bei vielen Anfragen gering zu halten, oder (ii) eine zuverlässige Methode, den phantomjs-Prozess zu überwachen und regelmäßig neu zu starten, damit der Speicher nicht außer Kontrolle gerät?

Antwort

1

PhantomJS Webpage schließen Methodenaufrufe von Ghostdriver nur beim Schließen der WebDriver-Sitzung. Sie können versuchen, Runit zu verwenden, um PhantomJS neu zu starten, wenn das Speicherlimit erreicht wurde. Erstellen Sie Bash-Skript wie folgt:

#!/bin/sh 
exec 2>&1 
exec chpst -u your_user -m 104857600 /usr/bin/phantomjs --webdriver=8910 

-m Flag Speichergrenze auf 100 MB festgelegt.

Platz oben Skript unter einem leeren Verzeichnis mit dem Namen "run":

| 
`-phantomjs-runit-+ 
        `-run 

Jetzt können Sie PhantomJS

sv start ./phantomjs-runit/ 
starten