【Debug】linux服务器破解五秒盾docker报错“[Errno 24] Too many open files: ‘/app/chromedriver‘“
在获取某一外国文献网站的内容的时候,根据如下博客,使用了docker成功爬取。
本来挂在两台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进程,而没有正确地关闭它们,或者某些其他进程导致文件描述符数量增加。
以下是一些建议来解决这个问题:
-
检查你的代码:确保每次启动chromedriver或其他资源后,你都正确关闭了它。如果你在Python中使用webdriver,确保在完成操作后调用
driver.quit()或driver.close()。 -
增加系统的文件描述符限制:你可以临时增加用户或系统的文件描述符限制。例如,为当前用户增加限制:
ulimit -n 4096这将文件描述符的软限制设置为4096。但这只是临时的,重新登录后会被重置。
-
持久性地增加文件描述符限制:要持久性地更改限制,你可以编辑
/etc/security/limits.conf文件(需要root权限),并添加以下行:* soft nofile 4096 * hard nofile 8192这会将默认的软限制和硬限制分别设置为4096和8192。然后,你需要重新登录或重启系统。
-
检查正在运行的进程:使用
ps aux | grep chromedriver来查看当前正在运行的chromedriver进程。如果看到大量的进程,这可能意味着你在代码中没有正确地管理这些进程。 -
考虑使用连接池或其他管理资源的方法:如果你的应用程序需要频繁地打开和关闭资源(如数据库连接、文件、web驱动器等),考虑使用连接池或其他资源管理技术来有效地重用资源。
希望上述建议能帮助你解决问题!
更多推荐
所有评论(0)