2013-05-22 4 views
7

Я бегу phantomjs в режиме удаленного WebDriver с phantomjs --webdriver 8910, а затем получить много страниц с использованием Селен питона привязок с чем-то вроде:Ограничить использование памяти phantomjs с помощью селен-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() 

wd.quit(), кажется, не делать ничего. Мониторинг процесса с помощью верхнего уровня показывает, что использование памяти в процессе phantomjs продолжает увеличиваться по мере того, как извлекается больше страниц. Если я перезапущу процесс phantomjs, то использование памяти опустится до минимума и начнет снова расти.

close method mentioned in the phantomjs docs звучит многообещающе, но я не вижу никакого способа назвать это через WebDriver protocol.

Существует ли способ сохранить использование памяти фантомами при выполнении многих запросов или (ii) надежный способ мониторинга и периодического перезапуска процесса phantomjs, чтобы память никогда не выходила из-под контроля?

ответ

1

Веб-сайт PhantomJS закрывает вызовы методов Ghostdriver только при закрытии сессии WebDriver. Вы можете попробовать использовать runit для перезапуска PhantomJS, когда был достигнут предел памяти. Создайте сценарий bash следующим образом:

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

-m флаг установленный предел памяти до 100 МБ.

Место над скриптом под пустой каталог с именем "Выполнить":

| 
`-phantomjs-runit-+ 
        `-run 

Теперь вы можете начать phantomjs

sv start ./phantomjs-runit/ 
Смежные вопросы