2013-05-22 26 views
7

私はphantomjs --webdriver 8910でリモートwebdriverをモードでphantomjsを実行し、その後のようなものでSeleniumのPythonバインディングを使用して多くのページを取得しています:selenium webdriverを使用したphantomjsのメモリ使用量を制限しますか?

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()は何もしないように表示されます。 topを使用してプロセスを監視すると、より多くのページが取得されるにつれてphantomjsプロセスのメモリ使用量が増加し続けることがわかります。私がphantomjsプロセスを再起動すると、メモリ使用量が少なくなり、再び安定して上昇します。

close method mentioned in the phantomjs docsは有望ですが、WebDriver protocolで呼び出す方法はありません。

(i)多くの要求をするときにphantomjsのメモリ使用を抑える方法、(ii)メモリが決して手に入らないようにphantomjsプロセスを監視し定期的に再起動する信頼できる方法はありますか?

答えて

1

PhantomJS Webページのクローズメソッドは、WebDriverセッションを閉じるときにのみ、Ghostdriverによって呼び出されます。 メモリ制限に達したときにrunitを使用してPhantomJSを再起動することができます。次のようにbashスクリプトを作成します。

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

-mフラグが100MBに設定されています。名前 "実行" といくつかの空のディレクトリの下のスクリプト上記

場所:

| 
`-phantomjs-runit-+ 
        `-run 

今、あなたはphantomjsに

sv start ./phantomjs-runit/ 
を開始することができます