7

我在 Remote WebDriver 模式下运行 phantomjs,phantomjs --webdriver 8910然后使用 Selenium python 绑定获取许多页面,例如:

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 进程,那么内存使用率会下降并再次开始稳定攀升。

phantomjs 文档中提到的close 方法听起来很有希望,但我看不到任何通过WebDriver 协议调用它的方法。

是否有(i)一种方法可以在发出许多请求时降低 phantomjs 的内存使用率,或者(ii)一种可靠的方法来监视和定期重新启动 phantomjs 进程以使内存永远不会失控?

4

2 回答 2

1

只有当您关闭 WebDriver 会话时,Ghostdriver 才会调用 PhantomJS 网页关闭方法。当达到内存限制时,您可以尝试使用 runit 重新启动 PhantomJS。创建 bash 脚本如下:

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

-m 标志将内存限制设置为 100MB。

将上面的脚本放在一个名为“run”的空目录下:

 |
 `-phantomjs-runit-+
                   `-run

现在你可以启动 phantomjs

sv start ./phantomjs-runit/
于 2013-07-25T16:44:33.927 回答
1

这个 SO question建议使用已弃用的release以支持close。似乎python webdriver API公开了close方法

于 2013-06-10T18:33:24.973 回答