at org.apache.http.util.EntityUtils.toString(EntityUtils.java:244) 线程卡死
2017-09-28 12:58
1136 查看
简述:
最近遇见做爬虫遇见一个诡异的问题,爬虫的处理流程滞留在一个阶段不忘下执行了。导致出现大量介于爬取开始和爬取结束中间状态停留,从而客户客户天天揪着我问这问那,什么问题又什么时候解决。麻烦的要死,有没有……
诡异的问题之所以称之为诡异,就是因为他让你摸不到头脑。没有异常也没有日志,线程就在那里杳无音讯了,接着查线程ID,好家伙后面也没有,说明它干私活去了。
问题:
一切都是缘分,瞧今儿一早来。一个surprise,问题复现了,而且现场保存完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/09/c19d9b2609b4f495878bc0f749556def)
再查看堆:
"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翘辫子了。导致流卡在了那里,问题找到了,解决办法也便随之而来。
等解决了再写吧。
最近遇见做爬虫遇见一个诡异的问题,爬虫的处理流程滞留在一个阶段不忘下执行了。导致出现大量介于爬取开始和爬取结束中间状态停留,从而客户客户天天揪着我问这问那,什么问题又什么时候解决。麻烦的要死,有没有……
诡异的问题之所以称之为诡异,就是因为他让你摸不到头脑。没有异常也没有日志,线程就在那里杳无音讯了,接着查线程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翘辫子了。导致流卡在了那里,问题找到了,解决办法也便随之而来。
等解决了再写吧。
相关文章推荐
- HTTP Status 500 - java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/LocalResolver
- Cannot assign value of type 'java.lang.String' to property 'file' of type 'org.apache.struts.upload.FormFile'
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- java.lang.NoClassDefFoundError: org/apache/http/entity/mime/content/ContentBody
- java.lang.ClassNotFoundException: org.apache.http.util.Args
- java.lang.ClassNotFoundException: org.apache.http.util.Args
- java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils
- 找不到 org.apache.http.conn.util.InetAddressUtils
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils .
- Maven使用tomcat7-maven-plugin插件run时出现错误: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component
- 启动Tomcat报错:严重: Exception starting filter struts2 java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
- java.lang.NoClassDefFoundError: org.apache.commons.lang.StringEscapeUtils
- java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils .异常
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- struts2 java.lang.ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- 执行Hive时出现org.apache.hadoop.util.RunJar.main(RunJar.java:136) Caused by: java.lang.NumberFormatException: For input string: "1s"错误的解决办法(图文详解)
- struts2 java.lang.ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils