您的位置:首页 > 理论基础 > 计算机网络

at org.apache.http.util.EntityUtils.toString(EntityUtils.java:244) 线程卡死

2017-09-28 12:58 1136 查看
简述:

          最近遇见做爬虫遇见一个诡异的问题,爬虫的处理流程滞留在一个阶段不忘下执行了。导致出现大量介于爬取开始和爬取结束中间状态停留,从而客户客户天天揪着我问这问那,什么问题又什么时候解决。麻烦的要死,有没有……

         诡异的问题之所以称之为诡异,就是因为他让你摸不到头脑。没有异常也没有日志,线程就在那里杳无音讯了,接着查线程ID,好家伙后面也没有,说明它干私活去了。

问题:

  

         一切都是缘分,瞧今儿一早来。一个surprise,问题复现了,而且现场保存完成。



再查看堆:

"ispSpiderExecutor-1" #42 prio=5 os_prio=0 tid=0x0000000021c21000 nid=0x3858 runnable [0x0000000024fbe000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:136)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:152)
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:270)
at org.apache.http.impl.io.ChunkedInputStream.getChunkSize(ChunkedInputStream.java:240)
at org.apache.http.impl.io.ChunkedInputStream.nextChunk(ChunkedInputStream.java:206)
at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:169)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(Strea
4000
mDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
- locked <0x0000000776edbb08> (a java.io.InputStreamReader)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.Reader.read(Reader.java:140)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:244)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:288)
at com.hbc.api.util.SimpleHttpClientUtil.httpGetRespTxt(SimpleHttpClientUtil.java:77)
at com.hbc.api.service.YdJxCallClientService.queryBillDetail(YdJxCallClientService.java:341)
at com.hbc.api.service.YdJxCallClientService.spiderDetailReward(YdJxCallClientService.java:316)
at com.hbc.api.service.AbstractCallService.spiderDetail(AbstractCallService.java:155)
at com.hbc.api.service.AbstractCallService.saveToMongodb(AbstractCallService.java:120)
at com.hbc.api.service.AbstractCallService.synchroData(AbstractCallService.java:829)
at com.hbc.api.service.YdJxCallClientService.asynchroData(YdJxCallClientService.java:290)
at com.hbc.api.service.YdJxCallClientService$$FastClassBySpringCGLIB$$77e8e9d4.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:718)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:108)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- <0x0000000776704e08> (a java.util.concurrent.ThreadPoolExecutor$Worker)


           那么问题变得乐观起来,因为有迹可循呀。
            瞧一瞧,看一看

at org.apache.http.util.EntityUtils.toString(EntityUtils.java:244)
结论:

         是由于使用代理IP,当EntityUtils 流读取一半时,代理ip翘辫子了。导致流卡在了那里,问题找到了,解决办法也便随之而来。

         等解决了再写吧。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐