5
回答
httpcomponents-client-4.2.1 异常
终于搞明白,存储TCO原来是这样算的>>>   

在使用httpcomponents-client-4.2.1时,任务运行一段时间就抛出以下例外,实在找不到原因,请高手不吝赐教,万分感谢!

堆栈错误:

org.apache.http.TruncatedChunkException: Truncated chunk ( expected size: 47956; actual size: 35656)
        at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:186)
        at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.Reader.read(Reader.java:123)
        at org.apache.http.util.EntityUtils.toString(EntityUtils.java:224)
        at org.apache.http.util.EntityUtils.toString(EntityUtils.java:248)
        at com.bw30.bjappmanage.common.service.impl.HttpClientServiceImpl$2.handleResponse(HttpClientServiceImpl.java:206)
        at com.bw30.bjappmanage.common.service.impl.HttpClientServiceImpl$2.handleResponse(HttpClientServiceImpl.java:1)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1070)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1044)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1035)
        at com.bw30.bjappmanage.common.service.impl.HttpClientServiceImpl.getHttpEntityText(HttpClientServiceImpl.java:214)
        at com.bw30.bjappmanage.task.data.crawl.LiquGetThread.run(LiquGetThread.java:73)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)


举报
aaabbbccc-111
发帖于5年前 5回/3K+阅
共有5个答案 最后回答: 5年前

org.apache.http.TruncatedChunkException: Truncated chunk ( expected size: 47956; actual size: 35656)

不一定能解决你的问题,但是从异常分析 你抓取的url 是Transfer-Encoding:chunked ,有可能是抓取的时候丢包了,导致expected size 和actual size 不一致。

我也不是高手,你不要在任何社区发那样的留言,要淡定,尊重别人。

--- 共有 1 条评论 ---
aaabbbccc-111惭愧! 在异步抓取的时候就有这个例外,同步执行的时候就没问题。请教您有什么解决方案吗,谢谢! 5年前 回复
时序问题。原因:用的是线程池处理方式,那么就存在数据同步问题,你自己都说了同步执行时没有问题,说明同步执行时时序正好能对的上,数据接收和解析正常,异步执行时你抓包的时候恰好数据丢了一些。你可以多抓几次包,看每次丢包的数据量是否都一样,可以初步判断是否是异步执行时丢了数据。然后再做进一步分析,不太清楚你代码的使用场景,仅从异常日志上分析不了具体原因。
我开了 两个tomcat,分开抓两个web站的内容,一个正常,一个偶尔会出现 org.apache.http.TruncatedChunkException: Truncated chunk这个异常,单独跑的时候,貌似没遇见过,所在的网络环境也不是太好,这个异常貌似是丢包的一个提示吧,也没解决,只是异常后捕获一下,再继续抓……期待更多人讨论交流
顶部