开发者社区> 问答> 正文

用HttpClient做数据采集时的阻塞问题

最近写了个程序采一个网站的信息,第一次。程序涉及到的工具是Java、MySQL、Apache的HttpClient。
HttpClient设置了连接超时、响应超时,都是一分钟。每采集一两个小时偶尔有一些请求在1分钟之内抛出java.net.SocketTimeoutException: Read timed out。这说明设置的超时是有效的。
听说抛出Read time out是因为采集太频繁,对方服务器有保护,所以我写了代码每次抛错就休眠2分钟再继续采集。
1.第一个问题是,程序在白天开始跑,好好的,但从晚上12点左右到第二天早上7、8点(有时是6点),完全没有打印一点日志信息,直到7、8点过后才抛出java.net.SocketTimeoutException:
Read timed out,而且一个每隔15分钟执行缓存清理的线程在这段时间内也没执行过。一头雾水。
2.第二个问题是由第一个问题连带引出来的,在我做过的3次测试里,7、8点过后程序“恢复采集”,但出现已下问题:
有一次曾经出现数据库连接已关闭的情况,但是数据库连接池已经配置好定期检查空闲连接,应该确保返回的连接是有效的啊。用的是BoneCP。
有两次数据库连接还能正常使用,但是对被采集的服务器发起的请求开始比较频繁地出现Read timed out。
反正都是不能恢复正常采集,要重启,我也是醉了。
麻烦各位亲帮我解答一下,问题可能出现在哪里,怎么让我的采集程序可以一口气跑完.

展开
收起
蛮大人123 2016-02-27 19:00:07 2904 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    你这个情况无非2种可能
    1.对方不让你看了
    2.你的项目有问题
    是否确定肯定是晚上12点之后就不行了?会不会是你每天重启的时间都差不多,导致看上去好像是12点之后不行的,重启的时间改到下午做看看会怎样。
    建议你最好能换一个网站采集,确定没有那种不让你看的限制,先排除掉自己程序的问题之后再去猜测对方是怎么配置的。

    2019-07-17 18:49:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载