java - SocketTimeoutException 在应用程序运行一段时间后不停地出现,但通过重新启动它立即解决

标签 java apache http socket-timeout-exception

我有一个爬虫 Java 应用程序,它应该连接到一些 HTTP 服务器,下载它们页面的 HTML 内容,然后移动到其他 HTTP 服务器。对于此任务,我使用了 Apache HTTP 库。

在运行的前几个小时,事情似乎运行得相当顺利(有时会抛出一些与连接相关的异常,但这是可以预料的)。 然而过了一段时间,似乎我发出的每个请求都不断收到 SocketTimeoutException。异常不会发生在 HttpClient 类的“执行”方法上,而是当我尝试获取实体的内容(我从 HttpResponse 对象中检索)时,或者当我尝试将该内容写入文件时。

然后,如果我停止应用程序并重新启动它,事情似乎会恢复正常工作 - 即使它从它停止的地方开始,这意味着它正在与我收到 SocketTimeoutException 的相同服务器交互,当尝试与之前互动。

我尝试寻找各种可能的清理,我可能会遗漏这些清理,但在使用这个库时可能是必不可少的,但找不到任何东西。

如有任何帮助,我们将不胜感激。 谢谢。

最佳答案

这听起来像是连接池可能导致的事情,如果在客户端库等待检索池连接时发生超时,那么当您完成连接池时您没有关闭它们。您确定已正确关闭所有内容(在 finally 语句中)吗?

如果你运行 Wireshark要监控您的流量,当它“中断”时会发生哪些网络流量?

关于java - SocketTimeoutException 在应用程序运行一段时间后不停地出现,但通过重新启动它立即解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776413/

相关文章:

apache - .htaccess-以静默方式将所有内容重写/重定向到内部子文件夹

php - 是否有支持 http 的好 php git 客户端?

java - 泛型 hell : hamcrest matcher as a method parameter

java - XMLUnit:无法使用 overrideDifferenceListener 附加自定义 DifferenceListener

java - 我如何在 Eclipse 中解决这个项目方面?

php - 如何修复 PHP 中格式错误的 URL?

php - 复制请求并发送到另一台服务器

Java 在新线程中因 openConnection 而挂起

java - 如何从表中选择前 5 个产品

Java向下兼容性说明