在获取某一外国文献网站的内容的时候,根据如下博客,使用了docker成功爬取。

深入解析Cloudflare五秒盾与爬虫绕过技巧

本来挂在两台Linux服务器上一直爬的好好的,突然不行了,以为是需要国外ip倒腾了一整天,最后搞定了国外ip还是没解决这个问题。检查response内容发现是

{"status": "error", 
"message": "Error: Error solving the challenge. [Errno 24] Too many open files: '/app/chromedriver'", 
"startTimestamp": 1697626598152, 
"endTimestamp": 1697626598153, "version": "3.3.6"}

我的最后解决办法是重启了服务器就好了,但是治标不治本,运行一段时间后还是有可能出现相同错误。


问了Chatgpt应该有治本的办法。
以下为它的回答,供参考:

这个错误消息表明你遇到了一个“Too many open files”错误。在Linux系统中,这通常是因为一个进程打开的文件描述符数量超过了系统限制。

具体到这个错误,它与 /app/chromedriver 相关,这意味着可能是你在代码中多次启动了chromedriver进程,而没有正确地关闭它们,或者某些其他进程导致文件描述符数量增加。

以下是一些建议来解决这个问题:

  1. 检查你的代码:确保每次启动chromedriver或其他资源后,你都正确关闭了它。如果你在Python中使用webdriver,确保在完成操作后调用 driver.quit()driver.close()

  2. 增加系统的文件描述符限制:你可以临时增加用户或系统的文件描述符限制。例如,为当前用户增加限制:

    ulimit -n 4096
    

    这将文件描述符的软限制设置为4096。但这只是临时的,重新登录后会被重置。

  3. 持久性地增加文件描述符限制:要持久性地更改限制,你可以编辑 /etc/security/limits.conf 文件(需要root权限),并添加以下行:

    *               soft    nofile          4096
    *               hard    nofile          8192
    

    这会将默认的软限制和硬限制分别设置为4096和8192。然后,你需要重新登录或重启系统。

  4. 检查正在运行的进程:使用 ps aux | grep chromedriver 来查看当前正在运行的chromedriver进程。如果看到大量的进程,这可能意味着你在代码中没有正确地管理这些进程。

  5. 考虑使用连接池或其他管理资源的方法:如果你的应用程序需要频繁地打开和关闭资源(如数据库连接、文件、web驱动器等),考虑使用连接池或其他资源管理技术来有效地重用资源。

希望上述建议能帮助你解决问题!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐