我有一个爬虫 Java 应用程序,它应该连接到一些 HTTP 服务器,下载它们页面的 HTML 内容,然后移动到其他 HTTP 服务器。对于此任务,我使用了 Apache HTTP 库。
在运行的前几个小时,事情似乎运行得相当顺利(有时会抛出一些与连接相关的异常,但这是可以预料的)。 然而过了一段时间,似乎我发出的每个请求都不断收到 SocketTimeoutException。异常不会发生在 HttpClient 类的“执行”方法上,而是当我尝试获取实体的内容(我从 HttpResponse 对象中检索)时,或者当我尝试将该内容写入文件时。
然后,如果我停止应用程序并重新启动它,事情似乎会恢复正常工作 - 即使它从它停止的地方开始,这意味着它正在与我收到 SocketTimeoutException 的相同服务器交互,当尝试与之前互动。
我尝试寻找各种可能的清理,我可能会遗漏这些清理,但在使用这个库时可能是必不可少的,但找不到任何东西。
如有任何帮助,我们将不胜感激。 谢谢。
最佳答案
这听起来像是连接池可能导致的事情,如果在客户端库等待检索池连接时发生超时,那么当您完成连接池时您没有关闭它们。您确定已正确关闭所有内容(在 finally
语句中)吗?
如果你运行 Wireshark要监控您的流量,当它“中断”时会发生哪些网络流量?
关于java - SocketTimeoutException 在应用程序运行一段时间后不停地出现,但通过重新启动它立即解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776413/